我很难理解如何使用 Python 的多处理模块。
我有一个从 1
到 n
的总和,其中 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/