【发布时间】:2011-07-29 09:50:35
【问题描述】:
我有一小部分工人 (4) 和一个非常大的任务列表 (5000~)。我正在使用一个池并使用 map_async() 发送任务。因为我正在运行的任务相当长,所以我强制将块大小设置为 1,这样一个长进程就无法容纳一些较短的进程。
我想做的是定期检查还有多少任务需要提交。我知道最多有 4 个处于活动状态,我关心还有多少需要处理。
我用谷歌搜索过,找不到任何人这样做。
一些简单的帮助代码:
import multiprocessing
import time
def mytask(num):
print('Started task, sleeping %s' % num)
time.sleep(num)
pool = multiprocessing.Pool(4)
jobs = pool.map_async(mytask, [1,2,3,4,5,3,2,3,4,5,2,3,2,3,4,5,6,4], chunksize=1)
pool.close()
while True:
if not jobs.ready():
print("We're not done yet, %s tasks to go!" % <somethingtogettasks>)
jobs.wait(2)
else:
break
【问题讨论】:
-
我应该注意到我在 RHEL-6 系统上使用 python2.6,但是我对不同版本/平台上的示例持开放态度。
-
任务完成时减少的静态变量? (当任务明显开始时增加)。
-
在工作人员到达任务之前,任务不会“开始”。我想如果我创建了一个与要完成的任务大小相同的全局变量,然后每次启动可能会执行此操作的任务时将其递减,但这有点尴尬并且需要考虑线程安全。
-
更改以获取示例代码以编译和运行:fpaste.org/p4Hb。另外:gist.github.com/902947
-
谢谢亚当,我已经让上面的代码工作了。
标签: python pool multiprocess