gpt4 book ai didi

python - 使用 multiprocess.Process 创建进程以并行操作多个生成器,无需先创建列表

转载 作者:行者123 更新时间:2023-12-01 08:32:17 25 4
gpt4 key购买 nike

我有一个大型生成器列表,如下所示:

test_list = [(i for i in range(100000000)) for x in range(100)]

这比我的大得多,但说明了发电机的原因。

我想独立评估每个生成器上的函数:

def test_function(generator):
results = []
for i in range(3):
results.append(next(generator))
return results

对于这样的函数,在应用该函数之前不将整个生成器评估为列表是有意义的。

我想并行运行它:

import multiprocessing as mp

output = mp.Queue()

processes = [mp.Process(target=test_function, args=(generator, )) for generator in test_list]

# Run processes
for p in processes:
p.start()

# Exit the completed processes
for p in processes:
p.join()

# Get process results from the output queue
results = [output.get() for p in processes]

但是,我收到一个错误,表示生成器无法进行 pickle。

有什么方法可以并行运行这个过程?

谢谢, jack

最佳答案

不要使用无法腌制的生成器(如果您想知道原因,请参阅此 answer),而使用可以腌制的迭代器,并且只是带有 __next__() 方法的对象,因此您可以对它们调用 next() 。例如:

class first_n_squares:
def __init__(self, n):
self.i = 0
self.n = n

def __next__(self):
if self.i < self.n:
ret = self.i ** 2
self.i += 1
return ret
else:
raise StopIteration

first_n_squares 的实例是一个迭代器,因此可以对其进行 pickle,并且可以对其调用 next()。例如:

first_5_squares_iter = first_n_squares(5)
first_square = next(first_5_squares_iter)

关于python - 使用 multiprocess.Process 创建进程以并行操作多个生成器,无需先创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861437/

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