gpt4 book ai didi

python - 如何在 Python 中使用多处理对循环进行并行求和

转载 作者:太空狗 更新时间:2023-10-29 21:54:59 28 4
gpt4 key购买 nike

我很难理解如何使用 Python 的多处理模块。

我有一个从 1n 的总和,其中 n=10^10,它太大而无法放入列表中,似乎是许多使用多处理的在线示例的主旨。

有没有办法将范围“拆分”成一定大小的段,然后对每个段求和?

例如

def sum_nums(low,high):
result = 0
for i in range(low,high+1):
result += i
return result

我想通过将 sum_nums(1,10**10) 分成许多 sum_nums(1,1000) + sum_nums(1001,2000) + sum_nums(2001) 来计算它,3000)... 等等。我知道有一个闭式 n(n+1)/2 但假装我们不知道。

这是我试过的

import multiprocessing

def sum_nums(low,high):
result = 0
for i in range(low,high+1):
result += i
return result

if __name__ == "__main__":
n = 1000
procs = 2

sizeSegment = n/procs

jobs = []
for i in range(0, procs):
process = multiprocessing.Process(target=sum_nums, args=(i*sizeSegment+1, (i+1)*sizeSegment))
jobs.append(process)

for j in jobs:
j.start()
for j in jobs:
j.join()

#where is the result?

最佳答案

我发现 multiprocess.Pool 和 map() 的用法更加简单

使用您的代码:

from multiprocessing import Pool

def sum_nums(args):
low = int(args[0])
high = int(args[1])
return sum(range(low,high+1))

if __name__ == "__main__":
n = 1000
procs = 2

sizeSegment = n/procs

# Create size segments list
jobs = []
for i in range(0, procs):
jobs.append((i*sizeSegment+1, (i+1)*sizeSegment))

pool = Pool(procs).map(sum_nums, jobs)
result = sum(pool)

>>> print result
>>> 500500

关于python - 如何在 Python 中使用多处理对循环进行并行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29785427/

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