gpt4 book ai didi

python - 使用 multiprocessing.Pool 时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:44 24 4
gpt4 key购买 nike

我有以下代码。 generate(self, num)是一个类方法,它生成一组数字并将它们转换为二进制表示形式:

def generate(self, num):
M = [random.randint(0, 2 ** 64 - 1) for _ in range(num)]
M = list(set(M))
M = [('{0:0' + str(64) + 'b}').format(x) for x in M]
M = np.asarray([list(map(int, list(x))) for x in M])
return M

def run(self):
M = []
num = 10000
mlp = multiprocessing.Pool(multiprocessing.cpu_count()-1)
for i in xrange(0, num):
res = mlp.apply_async(self.generate, args=(i,))
M.append(res) # Here I think it is not good!!
mlp.close()
mlp.join()

结果附加到 M不正确,我得到 <multiprocessing.pool.ApplyResult object at 0x11ae6f690> 。如何修复此代码以实现并行性是一种有效的方法?

最佳答案

您不能使用list在多个进程之间共享/交换数据,它不是线程安全的。您应该使用 Manager 对象在进程之间进行数据操作。 Manager() 返回的管理器将支持类型 list、dict、Namespace、Lock、RLock、Semaphore、BoundedSemaphore、Condition、Event、Queue、Value 和 Array。

关于python - 使用 multiprocessing.Pool 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46247636/

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