97 lines
2.4 KiB
Python
Executable File
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
|