A Python library for executing tasks in parallel with threads and queues
Project description
Executor
Fast execute task with python and less mem ops
Why we need Thread Executor?
Python threading module is a good structure, it helps developers to folk a thread to run some background tasks. Python have Queue mechanism to connect thread data. But what problem??
-
First, threading module folk threads but python not commit late time. Then know your thread can run, but you don't know when? It's oke fast with small traffic but when server high load you will have some problem, high pressure on memory because when you create too many thread cause slowness.
waste of time
-
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. It can put more pressure to the application.
waste of resource
How to resolve problem??
This's my resolver.
-
We create
exact
ordynamic
number of threads. Then usingJob
- a unit bring data information toWorker
to process. Workers don't need to release, and you only create 1 time or reset it when you update config. -
Job bring 2 importance field is:
func
andargs
and you can call them likefunc(*args)
and get all the results and return oncallback
is optional. -
Your app doesn't need to create and release threads continuously
-
Easy to access and using when coding.
Disadvance?
- 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
Jobs
inQueue
that have not been processed will belost
.
Installtion
Now it's time you can install lib and experience
pip install thread-executor
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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for thread_executor-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 984899840e1153e63f86e6f3e9b7948ea702e960cc6f2c60de1c595f46bbad04 |
|
MD5 | 10c7cfb689b8d897d8be0af41e82d6b5 |
|
BLAKE2b-256 | 752f3aea4e9962b79b45ec49686e99699a31d3f792901101989aaa6f8a261eaf |