为了账号安全,请及时绑定邮箱和手机立即绑定

我可以通过将函数应用于具有多处理功能的数据对象中的项目来提高性能吗?

我可以通过将函数应用于具有多处理功能的数据对象中的项目来提高性能吗?

侃侃尔雅 2021-08-11 22:00:10
我已经浏览了大量multiprocessing关于 SO 和文档的答案,要么这些问题真的很老(Python 3.X 自那以后进行了大量改进)要么没有找到明确的答案。如果我可能错过了一些相关的东西,请为我指明正确的方向。我从我在文件夹模块中定义的一个简单函数开始,因为我正在运行 Jupyter Notebook,并且似乎由于冲突,您只能multiprocessing在导入的函数上运行:def f(a):    return a * 100构建了一些测试数据并运行了一些测试:from itertools import zip_longestfrom multiprocessing import Process, Pool, Array, Queuefrom time import timefrom modules.test import *li = [i for i in range(1000000)]列表理解:真的很快start = time()tests = [f(i) for i in li]print(f'Total time {time() - start} s')>> Total time 0.154066801071167 s此处SO 示例的答案:11 秒左右start = time()results = []if __name__ == '__main__':    jobs = 4    size = len(li)    heads = list(range(size//jobs, size, size//jobs)) + [size]    tails = range(0,size,size//jobs)    pool = Pool(4)    for tail,head in zip(tails, heads):        r = pool.apply_async(f, args=(li[tail:head],))        results.append(r)    pool.close()    pool.join() # wait for the pool to be doneprint(f'Total time {time() - start} s')>>Total time 11.087551593780518 s还有Process一个我不知道是否适用于上面的例子。我不熟悉multiprocessing但确实理解创建新实例有一些开销,但随着数据的增长,它应该证明开销是合理的。我的问题是,根据 Python 3.x 的当前性能,是否使用multiprocessing与上述类似的操作仍然相关,或者甚至应该尝试一些操作。如果是,如何将它们应用于并行化工作负载。我读过和理解的大多数示例都用于网络抓取,当在一个接收信息的进程中有实际空闲时间时,并行化是有意义的,但是如果您正在运行诸如列表或字典之类的计算,将如何处理它.
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信