gpt4 book ai didi

python-3.x - python-3.x中for循环的多核并行计算

转载 作者:行者123 更新时间:2023-12-02 00:50:57 24 4
gpt4 key购买 nike

我有一个简单的 for 循环,它打印一个从 1 到 9999 的数字,中间有 5 秒的休眠。代码如下:

import time

def run():
length = 10000
for i in range(1, length):
print(i)
time.sleep(5)
run()

我想应用 multiprocessing 来与多核同时运行 for 循环。所以我修改了上面的代码,取5核:

import multiprocessing as mp
import time

def run():
length = 10000
for i in range(1, length):
print(i)
time.sleep(5)

if __name__ == '__main__':
p = mp.Pool(5)
p.map(run())
p.close()

运行该作业没有问题,但它似乎没有与 5 个内核并行运行。我怎样才能使代码按预期工作?

最佳答案

首先,您正在运行相同的 1..9999 循环 5 次,其次,您正在执行 run 函数而不是将其传递给 .map() 方法。

您必须在将队列传递给 Pool 实例之前准备好队列,以便所有 5 个工作线程处理同一个队列:

import multiprocessing as mp
import time

def run(i):
print(i)
time.sleep(5)

if __name__ == '__main__':
length = 10000
queue = range(1, length)
p = mp.Pool(5)
p.map(run, queue)
p.close()

请注意,它将按照 documentation 中的说明乱序处理数字.例如,worker #1 将处理 1..500,worker #2 将处理 501..1000 等等:

This method chops the iterable into a number of chunks which it submits to the process pool as separate tasks. The (approximate) size of these chunks can be specified by setting chunksize to a positive integer.

如果您想更类似于处理数字到单线程版本,请将chunksize设置为1:

p.map(run, queue, 1)

关于python-3.x - python-3.x中for循环的多核并行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57721435/

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