pyxqueue
点击中文版 README进入中文文档。
a multi-processes task queue using redis streams.
install
pyxqueue uses some feature of python 3.7, so you should use python 3.7 or newer.
pip install pyxqueue
Usage
background task
import time
import redis
from pyxqueue import TaskQueue
client = redis.Redis()
queue = TaskQueue(client, stream_key='background-task')
@queue.task
def sleep(n):
print(f'going to sleep for {n} seconds')
time.sleep(n)
print(f'woke up after {n} seconds')
if __name__ == '__main__':
import sys
usage = 'Usage: python background-task.py (worker | test)'
if len(sys.argv) != 2:
print(usage)
elif sys.argv[1] == 'worker':
queue.run()
elif sys.argv[1] == 'test':
sleep(2)
else:
print(usage)
rpc
import redis
from pyxqueue import TaskQueue
client = redis.Redis()
queue = TaskQueue(client, stream_key='rpc')
@queue.task
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return b
if __name__ == '__main__':
import sys
usage = 'Usage: python rpc.py (worker | test)'
if len(sys.argv) != 2:
print(usage)
elif sys.argv[1] == 'worker':
queue.run()
elif sys.argv[1] == 'test':
fib_100k_result = fib(100_000)
print(f'100kth fib number starts ends with: {str(fib_100k_result.get())[-6:]}')
else:
print(usage)
task info
>>> task_id = b'1551943344215-0'
>>> queue.get_task(task_id)
{
'task_id': b'1551943344215-0',
'info': {
'state': 2,
'value': None,
'worker': 'worker-1-66202570-40a9-11e9-bc87-00163e0eb975',
'update_time': 1551943344
},
'data': {
b'task': b'{"task_name": "queues.spider.download", "args": [75], "kwargs": {}}'
}
}
progress
import time
import redis
from pyxqueue import TaskQueue
client = redis.Redis()
queue = TaskQueue(client, stream_key='progress')
@queue.task
def long_work():
for i in range(100):
queue.update_task_progress(i)
time.sleep(1)
if __name__ == '__main__':
import sys
usage = 'Usage: python progress.py (worker | test)'
if len(sys.argv) != 2:
print(usage)
elif sys.argv[1] == 'worker':
queue.run()
elif sys.argv[1] == 'test':
long_work()
else:
print(usage)
notes
this package is heavily inspired from: http://charlesleifer.com/blog/multi-process-task-queue-using-redis-streams/
Metadata
Release files for pyxqueue 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pyxqueue-0.1.1.tar.gz | 6.4 kB | Without provenance | Details for pyxqueue-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pyxqueue-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for pyxqueue-0.1.1-py3-none-any.whl |
Total release size: 12.6 kB
Release files / pyxqueue-0.1.1.tar.gz
| Download URL | pyxqueue-0.1.1.tar.gz |
|---|---|
| Size | 6.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1b460f8f15095d91d8595fd4d3c5ab021d8bb7da82a9b49af378ff2e396a3103
|
|
BLAKE2b-256 checksum How to use checksums |
616ecbf612d23726083023be782c15e54bcec3bb85fd121d0233de09c01ffad4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6
|
Release files / pyxqueue-0.1.1-py3-none-any.whl
| Download URL | pyxqueue-0.1.1-py3-none-any.whl |
|---|---|
| Size | 6.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
03f7fdf45c32bbf0076be943ac468f14cc12f7422c0c273ba68697c3dc68cf1d
|
|
BLAKE2b-256 checksum How to use checksums |
e64fc2bb499780353ca781fab51c4169b8dc51d5e5649d79e8fc403b74d7ba96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6
|
Security for pyxqueue 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.