gpt4 book ai didi

python - 在 Python 中使用池

转载 作者:行者123 更新时间:2023-11-28 21:50:37 25 4
gpt4 key购买 nike

我对使用 Python 进行多处理还很陌生,我正在尝试了解如何正确使用 Pool。我有一些看起来像这样的代码:

import numpy as np
from multiprocessing.dummy import Pool as ThreadPool
...


pool = ThreadPool(15)

arb = np.arange(0,len(np.concatenate((P,V),axis=0)),1)

F = pool.map(tttt,arb)

pool.close()
pool.join()

NT = 1000

for test in range(0,NT):
(P,V) = Dynamics(P,V,F)

pool = ThreadPool(15)

F = pool.map(tttt,arb)

pool.close()
pool.join()

...

tttt和Dynamics是之前定义的两个函数。我想使用 Pool 能够使用 tttt 同时计算很多值,但我也想更新我用于这些计算的值(tttt 取决于 P 和 V,尽管不是明确的)。

我是否必须像现在这样创建和关闭池两次,还是只需要一次?

最佳答案

简单回答

您似乎想在 for 循环的每次迭代中使用一个进程池。您已经使事情变得比使用 Pool.map 所需的更复杂,但是您对 .join().close() 的调用> 建议您宁愿使用 Pool.map_async。这是一个简单的例子:

import numpy as np
from multiprocessing import Pool
from time import sleep

def print_square(x):
sleep(.01)
print x**2

if __name__=='__main__':

for k in range(10):
pool = Pool(3)
arb = np.arange(0,10)
pool.map_async(print_square,arb)
pool.close()
pool.join()

一般说明

  1. 您通常应该包含一个 minimal, complete, verifiable example .您的示例无法运行。更糟糕的是,它包含许多无关的特定于域的代码(例如 PVDynamics),这会阻止其他人尝试运行您的示例。

  2. 说明观察到的代码行为(例如错误输出、运行时错误等)和期望的行为。

  3. Pool 导入为 ThreadPool 会造成混淆,因为线程和进程是 different并且具有非常相似的 API。

关于python - 在 Python 中使用池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751582/

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