python中的多线程求值串行和并行_Python中多个函数在同一点上的快速求值

如果您的函数是IO绑定的(这意味着它们花费大部分时间等待某个IO操作完成),那么使用多个线程可能是一个公平的解决方案。在

如果您的函数是CPU限制的(意味着它们将大部分时间用于实际的计算工作),那么多个线程将不会对您有所帮助,除非您使用的python实现没有global interpreter lock。在

这里可以使用多个python进程。最简单的解决方案是multiprocessing模块。下面是一个例子:#!/usr/bin/env python3

from multiprocessing import Pool

from functools import reduce

def a(x):

return reduce(lambda memo, i: memo + i, x)

def b(x):

return reduce(lambda memo, i: memo - i, x)

def c(x):

return reduce(lambda memo, i: memo + i**2, x)

my_funcs = [a, b, c]

#create a process pool of 4 worker processes

pool = Pool(4)

async_results = []

for f in my_funcs:

#seconds parameter to apply_async should be a tuple of parameters to pass to the function

async_results.append(pool.apply_async(f, (range(1, 1000000),)))

results = list(map(lambda async_result: async_result.get(), async_results))

print(results)

这种方法允许您并行地利用所有的CPU能力:只需选择一个与环境中CPU数量相匹配的池大小。这种方法的局限性是所有函数都必须是pickleable。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值