在pool.map和pool.join上下文中“阻塞”的真正本质是什么?

问题描述

我正在尝试为自己绘制一幅有关如何正确使用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.mappool.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 (将#修改为@)