gpt4 book ai didi

python - 在 pool.map() 和 pool.join() 的上下文中, "blocking"的真实性质是什么?

转载 作者:行者123 更新时间:2023-12-05 07:02:59 25 4
gpt4 key购买 nike

我正在尝试为自己描绘一幅如何正确使用 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]):

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com