问题描述
我正在尝试为自己绘制一幅有关如何正确使用Pool
对象的图片。
我的任务要复杂一些,但这是要点:
def func1(x):
return x*2
def func2(x):
return np.sqrt(x)
with Pool(os.cpu_count()) as p:
x = p.map(func1,range(1000))
x = p.map(func2,x)
然后是pool.map
和pool.join
的一些文档:
map(func,iterable [,chunksize]):
与map()内置函数的并行等效项(仅支持 不过,有一个可迭代的参数,对于多个可迭代对象,请参见starmap()。 它会阻塞直到结果准备就绪。
和
join()
等待工作进程退出。必须调用close()或 使用join()之前先终止()。
我对“块”的含义不甚了解,但是如果我先叫x = p.map(func1,arg)
,然后再叫y = p.map(func2,x)
,则pool
将会严格分配给任务完成,然后将其用于下一个任务。
问题1:这种理解正确吗?
如果我的理解是正确的,则似乎不需要使用p.join()
,因为它似乎可以做相同的事情(阻止使用该池,直到完成当前工作为止)。
问题2:我需要对此类任务使用p.join()吗?
最后,我看到pool.close(),它“防止将更多任务提交给池。所有任务完成后,工作进程将退出”。在我不通知的情况下如何提交更多任务?
问题3:完成所有工作后,我是否需要做任何事情,例如致电p.close()
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)