Python 如何在for循环中使用多处理
我不熟悉PythonPython 如何在for循环中使用多处理,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我不熟悉Python多处理。我有一个返回值的函数,应该并行运行。在下面,您可以找到一个示例代码 import multiprocessing as mp from tqdm import tqdm def foo(self): arg_triplets = [(self.loc_x[ii], self.loc_y[jj], self.arg) for ii in np.arange(0, self.nx) for jj in np.arange
多处理
。我有一个返回值的函数,应该并行运行。在下面,您可以找到一个示例代码
import multiprocessing as mp
from tqdm import tqdm
def foo(self):
arg_triplets = [(self.loc_x[ii], self.loc_y[jj], self.arg)
for ii in np.arange(0, self.nx) for jj in np.arange(0, self.ny)]
ctx = mp.get_context('fork')
max_proc = mp.cpu_count()-1
pool = ctx.Pool(processes=max_proc)
return_values = list(tqdm(pool.imap(target_foo, arg_triplets), total=nx*ny))
pool.close()
pool.join()
所以,当我运行这个例程一次时,一切正常。函数
target\u foo
接受三个参数,并以列表形式返回所有输出值。我可以监视我的8核处理器的状态,看到其中7个处理器同时工作。但当我在for
循环中使用函数foo
时,问题就开始了。例如,我需要为多个foo
收集数据,而我不需要并行收集这些数据。因此,我为循环创建了一个,它按顺序调用foo
。在foo
的每次调用中,函数target\u foo
应该并行工作。问题是它第一次并行工作,但第二次就不行了。我做错了什么?显然我不明白问题到底是什么。显然我不明白问题到底是什么。