python循环叠加求和_如何在Python中使用多处理并行求和循环

首先,解决内存问题的最佳方法是使用迭代器/生成器而不是列表:def sum_nums(low, high):

result = 0

for i in xrange(low, high+1):

result += 1

return result

在python3中,range()生成一个迭代器,因此这只在python2中需要

现在,多处理出现在您希望将处理拆分到不同的进程或CPU核心时。如果不需要控制单个工人,最简单的方法是使用流程池。这将允许您将函数映射到池并获取输出。您也可以使用apply_async将作业一次一个地应用到池中,并获得可以使用.get()获得的延迟结果:import multiprocessing

from multiprocessing import Pool

from time import time

def sum_nums(low, high):

result = 0

for i in xrange(low, high+1):

result += i

return result

# map requires a function to handle a single argument

def sn((low,high)):

return sum_nums(low, high)

if __name__ == '__main__':

#t = time()

# takes forever

#print sum_nums(1,10**10)

#print '{} s'.format(time() -t)

p = Pool(4)

n = int(1e8)

r = range(0,10**10+1,n)

results = []

# using apply_async

t = time()

for arg in zip([x+1 for x in r],r[1:]):

results.append(p.apply_async(sum_nums, arg))

# wait for results

print sum(res.get() for res in results)

print '{} s'.format(time() -t)

# using process pool

t = time()

print sum(p.map(sn, zip([x+1 for x in r], r[1:])))

print '{} s'.format(time() -t)

在我的机器上,用10*10调用sum_nums几乎需要9分钟,但是使用Pool(8)和n=int(1e8)可以将此时间减少到一分钟多一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值