Skip to main content

Executor

Fast execute task with python threading and efficient mem ops

Package version Supported Python versions

Installation

pip install thread-executor

Why do we need Thread Executor?

Python threading module is a great structure, it helps developers to folk a thread to run some background tasks. Python have Queue mechanism to connect thread's data. But, what is the problem??

  • First, threading module create threads but number of threads that can be created is depended on the hardware. So there is a limit number of threads that can be created. It's fast and lightweight with small traffic but when server is high load you will have some problem, high pressure on memory because you can't create too many threads. can't create more threads

  • Second, when you create and release threads many times, it'll increase memory and CPUs time of system. Sometime, developers did not handle exceptions and release thread cause thread leak(memory leak). It can put more pressure on the application. waste of resource

How to resolve problem??

This's my resolver.

  • We create exact or dynamic number of threads. Then using Job - a unit bring data information to Worker to process. Workers don't need to release, and you only create 1 time or reset it when you update config.

  • Job brings 2 importance fields: func and args and you can call them by func(*args) and get all the results and return on callback is optional.

  • Your app doesn't need to create and release threads continuously

  • Easy to access and use when coding.

Disadvantage?

  • If you use callback then remembered to add try catch to handle thread leaked.
  • If queue is full you need to wait for available queue slot. set max_queue_size=0 to avoid this.
  • If you restart your app, all the Job in Queue that have not been processed will be lost.

Usage : Interface list

send(job: Job) -> None # Push a job to the queue
wait() -> None # wait for all jobs to be completed without blocking each other
scale_up(number_threads: int) -> None # scale up number of threads
scale_down(self, number_threads: int) -> None # scale down number of threads

Initial

from executor.safe_queue import Executor, Job

engine = Executor(number_threads=10, max_queue_size=0)

Send Simple Job

import time

def test_exec(*args, **kwargs):
    time.sleep(3)
    print(args)
    return [1, 2, 3]


def test_exec1(*args, **kwargs):
    print(kwargs)
    time.sleep(2)
    return {"a": 1, "b": 2, "c": 3}

engine.send(Job(func=test_exec, args=(1, 2), kwargs={}, callback=None, block=False))
engine.send(Job(func=test_exec1, args=(), kwargs={"time": 1}, callback=None, block=False))
engine.send(Job(func=test_exec1, args=(), kwargs={}, callback=None, block=False))
engine.send(Job(func=test_exec1, args=(), kwargs={}, callback=None, block=False))
engine.send(Job(func=test_exec1, args=(), kwargs={}, callback=None, block=False))
engine.wait()

Send Job with callback

def call_back(result):
    print(result)
    
for i in range(5):
    engine.send(Job(func=test_exec1, args=(), kwargs={"time": 1}, callback=call_back, block=False))
engine.wait()

Thread scale up/down

engine.scale_up(3)
engine.scale_down(3)

Metadata

Release files for thread-executor 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for thread-executor 0.1.3
File Size Uploaded
thread_executor-0.1.3.tar.gz 7.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for thread-executor 0.1.3
File Interpreter ABI Platform
thread_executor-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 16.0 kB

Release files / thread_executor-0.1.3.tar.gz

Download URL thread_executor-0.1.3.tar.gz
Size 7.8 kB
Tags Source
SHA-256 checksum
How to use checksums
9604efd25c49a4850a0a3a304fec0d5abf7765283115e266064b3f9d8c77f326
BLAKE2b-256 checksum
How to use checksums
beaffab10d1a8d5d8d0a62187588fb9778841452f7b42cba68897a5c7d0ca074
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.11.5 Windows/10

Release files / thread_executor-0.1.3-py3-none-any.whl

Download URL thread_executor-0.1.3-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d5347ef2dfbc7a719eacd8d967651960ebd7ca8f6019ba5f71a5b0d74211d3b3
BLAKE2b-256 checksum
How to use checksums
3593a2ff62c6d5dd6ed6b58d456e5ffb6b82a5ce38472f52a3f3f8393a31e11c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.11.5 Windows/10

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page