具有队列管理和redis特性的多进程装饰器
pytchfork的Python项目详细描述
#pytchfork[![PYPI版本](https://badge.fury.io/py/pytchfork.svg)(https://badge.fury.io/py/pytchfork)[![构建状态](https://travis-ci.org/shaunvxc/pytchfork.svg?branch=master)(https://travis-ci.org/shaunvxc/pytchfork)[![覆盖状态](https://coveralls.io/repos/shaunvxc/pytchfork/badge.svg?branch=master&service=github)(https://coveralls.io/github/shaunvxc/pytchfork)
从多处理导入队列导入pytchfork
@pytchfork(3)
def do-work(queue):
data=queue.get()
process(data)
queue=queue()
…
do-work(queue)\n此调用将派生3个进程
`````
pytchfork还可以管理工作进程的队列。只需提供对decorator的必要引用,
它将负责轮询队列并将数据传递给工作线程。
``python
from pytchfork import pytchfork
from multiprocessing import queue
@pytchfork(3,read_from=work廑queue,write廑to=done廑queue,sentinel=“done”)
def process_data(data):
processed_data=do_something(data)
返回processed_data
process_data();此调用将从工作队列读取3个进程&;写入完成队列。
````
为此,只需将“redis-uri”和“redis-port”传递给pytchfork decorator(除字符串值之外,redis还将用于键控“work-queue”和“done-queue”)。
`` python
从pytchfork导入pytchfork
@pytchfork(2,从'work''queue'读取,写入'done''u queue',redis''localhost',redis''u port=6379)
def process''u data(data):
processed''u data=do''u something(data)
return processed''u data
process'.在上面的代码片段中,这些进程将作为守护进程连续运行。对于具有固定数量的输入数据的较小任务,这可能不是理想的。
BR/>为了使进程在完成时退出,将“哨兵”参数传递给装饰器。要使此工作正常,redis-work-queue必须清楚地用sentinel的“N”个出现标记结尾,其中“N”是所需的进程数
`` python
对于范围(0,num_procs):
redis_client.lpush(“工作队列”,sentinel)
redis_port=port)
def process_data(data):
processed_data=do_something(data)
返回processed_data
process_data();这将分叉2个读/写到redis的进程。每个进程在从ReISIS工作队列中删除一个前哨值时,
退出,以进一步参考这一点,参见'Test/TestJoanCaltual.Py’.Br/>< Br/>上下文管理器> BR/>。您还可以使用上下文管理器来获得多处理池对象,而不必管理该对象。池的生命周期。即:
`` python
从pytchfork导入pytchfork
…
使用pytchwork(num_procs)as forked:
res=forked.map_async(process_data,data,callback=callback)
`````
此构造确保在块中的代码完成时关闭、联接和终止工作进程
分叉(https://github.com/shaunvxc/pytchfork/fork)
1.创建功能分支(`git checkout-b new feature`)
1提交更改(`git commit-am'add some feature`)
1。运行测试(`make test`)
1。将更改推送到分支(`git push origin new feature`)
1。创建拉取请求
从多处理导入队列导入pytchfork
@pytchfork(3)
def do-work(queue):
data=queue.get()
process(data)
queue=queue()
…
do-work(queue)\n此调用将派生3个进程
`````
pytchfork还可以管理工作进程的队列。只需提供对decorator的必要引用,
它将负责轮询队列并将数据传递给工作线程。
``python
from pytchfork import pytchfork
from multiprocessing import queue
@pytchfork(3,read_from=work廑queue,write廑to=done廑queue,sentinel=“done”)
def process_data(data):
processed_data=do_something(data)
返回processed_data
process_data();此调用将从工作队列读取3个进程&;写入完成队列。
````
为此,只需将“redis-uri”和“redis-port”传递给pytchfork decorator(除字符串值之外,redis还将用于键控“work-queue”和“done-queue”)。
`` python
从pytchfork导入pytchfork
@pytchfork(2,从'work''queue'读取,写入'done''u queue',redis''localhost',redis''u port=6379)
def process''u data(data):
processed''u data=do''u something(data)
return processed''u data
process'.在上面的代码片段中,这些进程将作为守护进程连续运行。对于具有固定数量的输入数据的较小任务,这可能不是理想的。
BR/>为了使进程在完成时退出,将“哨兵”参数传递给装饰器。要使此工作正常,redis-work-queue必须清楚地用sentinel的“N”个出现标记结尾,其中“N”是所需的进程数
`` python
对于范围(0,num_procs):
redis_client.lpush(“工作队列”,sentinel)
redis_port=port)
def process_data(data):
processed_data=do_something(data)
返回processed_data
process_data();这将分叉2个读/写到redis的进程。每个进程在从ReISIS工作队列中删除一个前哨值时,
退出,以进一步参考这一点,参见'Test/TestJoanCaltual.Py’.Br/>< Br/>上下文管理器> BR/>。您还可以使用上下文管理器来获得多处理池对象,而不必管理该对象。池的生命周期。即:
`` python
从pytchfork导入pytchfork
…
使用pytchwork(num_procs)as forked:
res=forked.map_async(process_data,data,callback=callback)
`````
此构造确保在块中的代码完成时关闭、联接和终止工作进程
分叉(https://github.com/shaunvxc/pytchfork/fork)
1.创建功能分支(`git checkout-b new feature`)
1提交更改(`git commit-am'add some feature`)
1。运行测试(`make test`)
1。将更改推送到分支(`git push origin new feature`)
1。创建拉取请求