Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Threads Utilities

Threads utilities in Python.

PyPIPyPI - Python VersionPyPI - LicensePyPI - DownloadsPyPI - DownloadsCoverage StatusGitHub code size in bytesGitHub last commitDeepSource

Threads pool manager

Description

Threads pool manager is a threads pool manager that manages a pool of task executors that execute tasks.

Queue Placement Algorithms

AlgorithmDescription
STRICT_PRIORITYHigher priority tasks are added to the queue before lower priority tasks.
AVOID_STARVATION_PRIORITYTasks are added to the queue in STRICT_PRIORITY,
and if tasks are not added to the last place in the queue in avoid_starvation_amount times,
the next task is added to the last place in the queue and will be flagged with avoid_starvation flag.
Other tasks will be added to the queue in AVOID_STARVATION_PRIORITY order after that flagged task, so this task will be executed before them.

Executors extension pool

The threads pool manager has an executors extension pool that extends the pool of task executors
when the pool is full and at least one task executor run more than executors_timeout_ms.

ThreadsPoolManager class

Methods

MethodDescriptionParametersReturns
add_taskAdds a task to the threads pool.task (ThreadTask | MethodTask) The task to add to the threads pool.
task_id (Optional[str], Default: None) Task identifier.
priority (int, Default: 1) Task Priority. Higher number is higher priority.
queue_placement (QueuePlacementEnum) Queue placement algorithm.
None
get_taskGets a task from the threads pool.task_id (str) Task identifier.ThreadTask | MethodTask | None Return task if task is found, otherwise return None.
is_task_existsChecks if task exists in the threads pool.task_id (str) Task identifier.bool True if task exists, otherwise False.
reset_metricsResets Metrics.NoneNone
startStarts the threads pool.NoneNone
shutdownShuts down the threads pool.NoneNone
active_tasks_amountReturns the amount of active tasks in the threads pool.@properyint Active tasks amount.
avoid_starvation_amountReturns Avoid Starvation Amount@properyint Avoid Starvation Amount.
executors_extension_pool_sizeReturns Executors Extension Pool Size.@properyint Executors Extension Pool Size.
executors_timeout_msReturns Executors Timeout in milliseconds.@properyint Executors Timeout in milliseconds.
executors_timeout_msSets Executors Timeout in milliseconds.@setter Executors Timeout in milliseconds.None
finished_tasksReturns finished tasks.
Finished tasks list will be truncated after each call.
@properyList[ThreadTask | MethodTask] Finished tasks.
is_all_executedReturns True if all tasks are executed.@properybool True if all tasks are executed, otherwise False.
is_executors_shutdownReturns True if executors pool is shutdown.@properybool
max_executors_extension_pool_sizeReturns Max Executors Extension Pool Size.@properyint Max Executors Extension Pool Size.
max_executors_extension_pool_sizeSets Max Executors Extension Pool Size.@setter Max Executors Extension Pool Size.None
max_executors_pool_sizeReturns Max Executors Pool Size.@properyint Max Executors Pool Size.
max_executors_pool_sizeSets Max Executors Pool Size.@setter Max Executors Pool Size.None
max_queue_sizeReturns Queue Size limitation.@properyint Max Queue Size.
max_queue_sizeSets Max Queue Size.@setter Max Queue Size.None
metricsReturns Metrics.@properyThreadsPoolManagerMetrics Metrics.
nameReturns Threads Pool Name.@properystr Threads Pool Name.
nameSets Threads Pool Name.@setter Threads Pool Name.None
queueReturns Queue.@properyQueue Queue.
queue_sizeReturns Queue Size.@properyint Queue Size.
shutdownShuts down the threads pool.NoneNone
shutdown_executorsShuts down executors pool.NoneNone
start_executorsStarts executors pool.NoneNone

TaskExecutor class

Methods

MethodDescriptionParametersReturns
startStarts the task executor.NoneNone
avoid_starvation_flagReturns Avoid Starvation Flag.@properybool
avoid_starvation_flagSets Avoid Starvation Flag.@setterNone
exceptionReturns Exception, if it happened in method that was executed in MethodTask.@properyException
stack_traceReturns stack trace, if exception happened in method that was executed in MethodTask.@properystr Exception stack trace.
priorityReturns priority.@properyint
taskReturns task.@properyThreadTask | MethodTask
task_idReturns task id.@properystr

ThreadTask class

Task that runs a thread.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
task_instanceReturns task instance.@properyThread Task Thread instance.
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

MethodTask class

Task that runs a method.

Methods

MethodDescriptionParametersReturns
executeExecutes the task.NoneNone
alive_date_msReturns task alive date ms.@properyint Alive date in ms.
exceptionReturns Exception, if it happened.@properyException
resultReturns task result.@properyAny Task result.
stack_traceReturns stack trace, if exception happened.@properystr Exception stack trace.
start_date_msReturns task start date ms.@properyint Start date in ms.
start_date_msSets task start date ms.@setterNone
task_stateReturns task state.@properyTaskStateEnum Task state.
task_stateSets task state.@setterNone

ThreadsPoolManagerMetrics class

dataclass that holds threads pool manager metrics.

Properties

PropertyDescriptionType
avoid_starvation_counterCount the times that AVOID_STARVATION_PRORITY flag has been raised.int
executed_method_counterCount the times that MethodTask has been executed.int
executed_task_counterCount the times that ThreadTask|MethodTask has been executed.int
executed_thread_counterCount the times that ThreadTask has been executed.int
max_execution_date_msMax execution date in ms.int
max_queue_sizeMax size that the queue has reached.int
method_tasks_counter_dictCount the times that MethodTask has been executed by task id.
key is task priority.
dict[int, int]
tasks_priority_counter_dictCount the times that ThreadTask|MethodTask has been executed by task id.
key is task priority.
dict[int, int]
thread_tasks_counter_dictCount the times that ThreadTask has been executed by task id.
key is task priority.
dict[int, int]

TaskStateEnum Enum

Task state enum.

EnumDescription
QUEUETask is in queue.
EXECUTORS_POOLTask is in executors pool.
EXECUTEDTask is finished.

QueuePlacementEnum Enum

Queue placement enum.

EnumDescription
STRICT_PRIORITYStrict Priority.
AVOID_STARVATION_PRIORITYAvoid Starvation Priority.

Examples:

  • Add tasks with STRICT_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png.png

    Add two tasks to the threads pool manager.
    The tasks will be executed as the two executors are empty.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_1), priority=1)

    threads-pool-manager-2-threads-2-executors.png

    Add 2 tasks in priority 1.
    Default queue placement is STRICT_PRIORITY.

    t_3=CustomThread()
    t_4=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=1)
    threads_pool_manager.add_task(ThreadTask(t_4), priority=1)

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add task in priority 2 (Higher priority) Default queue placement is STRICT_PRIORITY.

    t_5=CustomThread()
    threads_pool_manager.add_task(ThreadTask(t_3), priority=2)

    Task in priority 2 is executed before tasks in priority 1.

    threads-pool-manager-thread-strict-priority-2.png

  • Add tasks with AVOID_STARVATION_PRIORITY queue placement.

    Create a threads pool manager with 2 executors pool size. avoid_starvation_amount is set to 1.

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerthreads_pool_manager=ThreadsPoolManager(executors_pool_size=2)
    threads_pool_manager.avoid_starvation_amount=1threads_pool_manager.start()

    init-threads-pool-manager-2-executors.png

    Add 2 tasks in priority 1.

    fromnrt_threads_utils.threads_pool_manager.tasksimportThreadTaskfromnrt_threads_utils.threads_pool_manager.enumsimportQueuePlacementEnumt_1=CustomThread()
    t_2=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_1),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)
    threads_pool_manager.add_task(
    ThreadTask(t_2),
    priority=1,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    threads-pool-manager-2-threads-2-executors.png

    Add task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    Task in priority 2 is executed before tasks in priority 1.
    Avoid starvation counter is increased by 1 because the task is not appended to the end of the queue.

    threads-pool-manager-add-3-and-4-threads-2-executors.png

    Add another task in priority 2 (Higher priority)

    t_5=CustomThread()
    threads_pool_manager.add_task(
    ThreadTask(t_3), priority=2,
    queue_placement=QueuePlacementEnum.AVOID_STARVATION_PRIORITY)

    The task will flag with avoid_starvation_flag and will be added to the end of the queue.

    threads-pool-manager-avoid-starvation-flag.png

    Add the next tasks will be added in Avoid Starvation Priority after the flagged task.

    threads-pool-manager-avoid-starvation-next-tasks.png

  • Metrics.

    Create method that sleep for 10 seconds.

    Code

    fromnrt_threads_utils.threads_pool_manager.threads_pool_managerimportThreadsPoolManagerfromnrt_threads_utils.threads_pool_manager.tasksimportMethodTaskfromtimeimportsleepdefsleep_10_sec():
    sleep(10)
    return'a', 'b'threads_pool_manager= \
    ThreadsPoolManager(executors_pool_size=1)
    try:
    threads_pool_manager.start()
    mt_1=MethodTask(sleep_10_sec)
    mt_2=MethodTask(sleep_10_sec)
    mt_3=MethodTask(sleep_10_sec)
    threads_pool_manager.add_task(mt_1, priority=1)
    sleep(0.2)
    threads_pool_manager.add_task(mt_2, priority=2)
    threads_pool_manager.add_task(mt_3, priority=2)
    metrics=threads_pool_manager.metricsprint(f'Max queue size: {metrics.max_queue_size}')
    print(f'Max execution date ms {metrics.max_execution_date_ms}')
    print(f'Executed tasks counter: {metrics.executed_tasks_counter}')
    print(f'Executed threads counter: {metrics.executed_threads_counter}')
    print(f'Executed methods counter: {metrics.executed_methods_counter}')
    print(f'Avoid starvation counter: {metrics.avoid_starvation_counter}')
    print(f'Tasks priority counter dict {metrics.tasks_priority_counter_dict}')
    sleep(12)
    a, b=mt_1.resultprint('Result 1: '+a)
    print('Result 2: '+b)
    finally:
    threads_pool_manager.shutdown()
    threads_pool_manager.join()

    Output

    Max queue size: 2
    Max execution date ms 10000
    Executed tasks counter: 3
    Executed threads counter: 0
    Executed methods counter: 3
    Avoid starvation counter: 0
    Tasks priority counter dict {1: 1, 2: 2}
    Result 1: a
    Result 2: b
    

About

Threads utilities in Python

Resources

Code of conduct

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages