Python MasterQueueWorker结构多任务工具

BatchScript的Python项目详细描述


BatchScript

使用多进程+线程池+队列运行你的方法

$> pip3 install BatchScript
# or
$> git clone https://github.com/TaylorHere/BatchScript.git &&cd BatchScript && pip3 install -e .
# and you can test it
$> cd BatchScript && python3 test.py
frommasterimportMasterfromworkerimportWorkerimporthelperimportosclassConfig():MaxWorkerSize=os.cpu_count()-1#worker数量MaxThreadPoolSize=1024#每个worker的线程池大小ThreadQueueWaitTimeout=0.01#worker在job队列上获取数据的超时, 超时后会立即开始批量线程提交WorkerGetBatchSize=MaxThreadPoolSize#额定批大小, 如果worker获取数据时不超时, 那么在获取都这个数量后便开始批量线程提交JobsResultsQueueNum=MaxWorkerSize#jobs 和 results 队列对的数量, 该数量如果小于worker数量, 则最后一对会被未分配的worker共用, 共用队列可能会导致锁操作增加ResultsBatch=True#将一个batch的所有result当作一个result放入result 队列中master=Master(func=helper.sleep,config=Config())master.start()foriinrange(1000):master.job_put(0.01)whileTrue:print(master.result().get())

链接多个 master

frommasterimportMasterfromworkerimportWorkerimporthelpermaster=Master(func=helper.sleep)master.start()foriinrange(1000):master.job_put(0.01)another_master=Master(func=print,connection=master)#该master会将connection的master的results队列作为jobs队列, 如果该master的队列对比链接master的队列对数量少, 会造成链接master的result不能被全部消耗another_master.start()

采用 多进程启动Worker, worker维护线程池运行函数的方案 master内建和worker关联的多个任务队列和对应的多个结果队列 worker按batch从任务队列中获取数据并使用线程池提交运行 批量结束后将任务结果put到结果队列

你可以在config中调整

importosMaxWorkerSize=os.cpu_count()-1#worker数量MaxThreadPoolSize=1024#每个worker的线程池大小ThreadQueueWaitTimeout=0.01#worker在job队列上获取数据的超时, 超时后会立即开始批量线程提交WorkerGetBatchSize=MaxThreadPoolSize#额定批大小, 如果worker获取数据时不超时, 那么在获取都这个数量后便开始批量线程提交JobsResultsQueueNum=MaxWorkerSize#jobs 和 results 队列对的数量, 该数量如果小于worker数量, 则最后一对会被未分配的worker共用, 共用队列可能会导致锁操作增加ResultsBatch=True#将一个batch的所有result当作一个result放入result 队列中

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java广播接收器未检测到按键事件   java不为特定列更改创建修订   java采用了更实用的方法   java桌面窗格HTML呈现   java处理internet连接丢失   java在调整JFrame的大小时,如何防止JTable的列调整大小?   如何用Java中的“Scanner.hasNext”完成程序   具有模块名称的java停止IntelliJ项目工具窗口?   执行已编译的Rails-Warbler JAR文件时发生java加载错误   java Spring数据redis存储库不支持集合查询?   每个客户端的java队列请求   获取Java中的JSON嵌套数组元素   java GWT,Vaadin ConcurrentModificationException   firebase存储中的java在保存照片之前,我需要发送两次照片   JavaSpringEleaf如何在容器外使用变量