- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为自己描绘一幅如何正确使用 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]):
A parallel equivalent of the map() built-in function (it supports onlyone iterable argument though, for multiple iterables see starmap()).It blocks until the result is ready.
和
join()
Wait for the worker processes to exit. One must call close() orterminate() before using join().
我不太了解“ block ”的含义,但如果我调用 x = p.map(func1, arg)
后跟 y = p 似乎是这样。 map(func2, x)
pool
将严格分配给第一个任务,直到它完成,然后才允许它处理下一个任务。
问题 1:这种理解是否正确?
如果我的理解是正确的,似乎我不需要使用 p.join()
因为它似乎做同样的事情(阻止池被使用直到它完成它当前的工作)。
问题 2:像这样的任务我需要使用 p.join() 吗?
最后,我看到 pool.close(),它“防止将更多任务提交到池中。一旦所有任务完成,工作进程将退出”。不告诉我怎么可以提交更多的任务?
问题 3:完成所有工作后我是否需要做任何事情,例如调用 p.close()
?
最佳答案
您可以直接创建进程和池(并手动启动和停止它们),或者您使用 with
构造(就像您所做的那样)以便自动为您处理。
这应该会为您提供与您的代码相同的结果:
p = Pool(os.cpu_count())
x = p.map(func1, range(1000))
x = p.map(func2, x)
p.close()
关于python - 在 pool.map() 和 pool.join() 的上下文中, "blocking"的真实性质是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63403174/
我是一名优秀的程序员,十分优秀!