我已经浏览了大量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与上述类似的操作仍然相关,或者甚至应该尝试一些操作。如果是,如何将它们应用于并行化工作负载。我读过和理解的大多数示例都用于网络抓取,当在一个接收信息的进程中有实际空闲时间时,并行化是有意义的,但是如果您正在运行诸如列表或字典之类的计算,将如何处理它.
添加回答
举报
0/150
提交
取消