nfv/nfv/nfv-common/nfv_common/tasks/_task_worker.py

97 lines
2.4 KiB
Python
Executable File

#
# Copyright (c) 2015-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
from nfv_common import debug
from nfv_common import histogram
from nfv_common import thread
from nfv_common import timers
DLOG = debug.debug_get_logger('nfv_common.tasks.task_worker')
class TaskWorker(thread.ThreadWorker):
"""
Task Worker
"""
def __init__(self, name):
super(TaskWorker, self).__init__(name)
def initialize(self):
"""
Initialize the Task Worker
"""
return
def finalize(self):
"""
Finalize the Task Worker
"""
return
def do_work(self, action, work):
"""
Do work given to the Task Worker
"""
if TaskWorkerThread.ACTION_DO_WORK == action:
if work is not None:
work.run()
self.send_result(work)
class TaskWorkerThread(thread.Thread):
"""
Task Worker Thread
"""
ACTION_DO_WORK = "thread-do-work"
_id = 1
def __init__(self, name):
"""
Create a task worker
"""
self._id = TaskWorkerThread._id
self._name = name
self._worker = TaskWorker(self._name)
super(TaskWorkerThread, self).__init__(self._name, self._worker)
TaskWorkerThread._id += 1
@property
def id(self):
"""
Returns a unique identifier for this task worker
"""
return self._id
@property
def name(self):
"""
Returns the name for this task worker
"""
return self._name
def submit_task_work(self, task_work):
"""
Submit task work for this task worker to execute
"""
self.send_work(TaskWorkerThread.ACTION_DO_WORK, task_work)
def get_task_work_result(self):
"""
Returns the result of task work completed
"""
result = self._worker.get_result()
if hasattr(result.ancillary_result_data, 'execution_time'):
histogram.add_histogram_data(
result.name + ' [worker-execution-time]',
result.ancillary_result_data.execution_time, 'secs')
now_ms = timers.get_monotonic_timestamp_in_ms()
elapsed_secs = (now_ms - result.create_timestamp_ms) / 1000
histogram.add_histogram_data(result.name + ' [execution-time]',
elapsed_secs, 'secs')
return result