A threading library written in python
Project description
A threading library written in python. Help you build threaded app.
This module was originally included in ComicCrawler.
Features
Pause, resume, stop, restart thread.
Create child thread.
Create async tasks.
Communicate between threads with Message.
Install
pip install pythreadworker
Usage
Use function as target:
#! python3
from worker import Worker
count = 1
def increaser(thread):
global count
while True:
count += 1
thread.wait(1)
ic = Worker(increaser)
ic.start()
while True:
command = input("print|pause|resume|stop|exit: ")
if command == "print":
print(count)
if command == "pause":
ic.pause()
if command == "resume":
ic.resume()
if command == "stop":
ic.stop()
if command == "exit":
ic.stop()
ic.join()
break
Parent, child thread:
#! python3
from worker import Worker
p_thread = None
c_thread = None
def parent(thread):
global p_thread, c_thread
p_thread = thread
c_thread = thread.create_child(child)
c_thread.start()
thread.message_loop()
def child(thread):
thread.message_loop()
Worker(parent).start()
while True:
command = input("print|stop|exit: ")
if command == "print":
print("p_thread.is_running(): {}\nc_thread.is_running(): {}".format(
p_thread.is_running(),
c_thread.is_running()
))
if command == "stop":
p_thread.stop()
if command == "exit":
p_thread.stop()
p_thread.join()
break
Async task:
#! python3
from worker import Worker
from time import sleep
def long_work(t):
sleep(t)
return "Finished in {} second(s)".format(t)
lw_thread = Worker.async(long_work, 5)
# Do other stuff here...
print(lw_thread.get())
Async + parent/child:
#! python3
from worker import Worker
from time import sleep
p_thread = None
c_thread = None
def long_work(t):
sleep(t)
return "Finished in {} second(s)".format(t)
def parent(thread):
global p_thread, c_thread
p_thread = thread
async = thread.async(long_work, 5)
c_thread = async.thread
# Do other stuff here...
print(thread.await(async))
Worker(parent).start()
while True:
command = input("print|stop|exit: ")
if command == "print":
print("p_thread.is_running(): {}\nc_thread.is_running(): {}".format(
p_thread.is_running(),
c_thread.is_running()
))
if command == "stop":
p_thread.stop()
if command == "exit":
p_thread.stop()
p_thread.join()
break
Message:
#! python3
from worker import Worker
def work(thread):
@thread.listen("hello")
def _():
return "world!"
@thread.listen("ok")
def _():
return "cool"
thread.message_loop()
w_thread = Worker(work)
w_thread.start()
while True:
command = input("<message>|exit: ")
if command == "exit":
w_thread.stop()
w_thread.join()
break
else:
message = w_thread.message(command)
# Do other stuff here...
print(message.get())
Message + parent/child:
#! python3
from worker import Worker
from time import sleep
def odd_man(thread):
@thread.listen("hey")
def _(number):
print(number)
sleep(1)
thread.bubble("hey", number + 1)
thread.message_loop()
def even_man(thread):
@thread.listen("hey")
def _(number):
print(number)
sleep(1)
thread.broadcast("hey", number + 1)
od_thread = thread.create_child(odd_man)
od_thread.start()
thread.message("hey", 0)
thread.message_loop()
w_thread = Worker(even_man)
while True:
command = input("start|stop|exit: ")
if command == "start":
w_thread.start()
if command == "stop":
w_thread.stop()
if command == "exit":
w_thread.stop()
w_thread.join()
break
Clean up threads on exit:
#! python3
from worker import Worker, global_cleanup
def loop(thread):
thread.message_loop()
# if you doesn't hold the reference, the thread become daemon thread.
Worker(loop).start()
# pyWorker provide a cleanup function to stop all threads.
global_cleanup()
Known issues
If there is an error in worker.sync, the error message will be printed twice, once in the child thread and once in the parent.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pythreadworker-0.2.2.zip.
File metadata
- Download URL: pythreadworker-0.2.2.zip
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57b2e2587e0072b3e9c9d05a9f1a6a898ebb3828e31e5efa884feb5e7d00d03b
|
|
| MD5 |
9059a16dd2e0dd973d6cf6110ff13608
|
|
| BLAKE2b-256 |
dcdf292ecf83313365e26630b191448e03ebb21cfc3ae5f0c1f76270c5b46b7c
|
File details
Details for the file pythreadworker-0.2.2-py3-none-any.whl.
File metadata
- Download URL: pythreadworker-0.2.2-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
777fc1263edb8c1cea2a5137e65d9c33e0c965cc071ae9355d4c06a378493a3a
|
|
| MD5 |
be220328fc2f27e8832262f67b46ade1
|
|
| BLAKE2b-256 |
7a6eeac327eb27eab4fd4123469d4ea6d80a4f3e0d9ac0a8b0e56c66684bbb7b
|