我的代码很重,运行它需要很长时间。我遇到了以下代码,但我真的不知道它是如何工作的。
考虑def sigma(b)
是代码脚本中间的一个巨大功能。这部分是减慢代码运行速度的主要原因。我们在代码的其他部分使用sigma函数的结果。我只是把它放在下面的代码中。
from multiprocessing import Pool
from multiprocessing import Process
import multiprocessing
def sigma(b):
n=0
for i in range (1,550):
n=n+i+b
return n
p = multiprocessing.Process(target=sigma)
p.start()
print(sigma(2))
任何人都可以帮助我吗?
答案 0 :(得分:1)
一种方法(在修复西格玛的缩进之后):
# -*- coding: utf-8 -*-
import multiprocessing as mp
def sigma(b):
n=0
for i in range (1,550):
n=n+i+b
return n
if __name__ == '__main__':
inputs_b = [1, 2, 3, 4]
with mp.Pool(processes = 2) as p:
res = p.map(sigma, inputs_b)
多处理的唯一问题是你不能在IDE(如spyder)中运行它,因此你需要保存结果并在以后检索它。
可以使用numpy
,pandas
,pickle
或其他方式完成。
然后你可能需要有多个参数。在这种情况下,请使用starmap()
:
# -*- coding: utf-8 -*-
import multiprocessing as mp
def sigma(a, b):
n=0
for i in range (1,550):
n=n+i+b+a
return n
if __name__ == '__main__':
inputs_b = [(a,b) for a in range(5) for b in range(6, 10)]
with mp.Pool(processes = 2) as p:
res = p.starmap(sigma, inputs_b)
N.B:processes = N
给出要打开的进程数。建议使用物理CPU数量或CPU数量-1。
EDIT2:您的虚拟示例是一个非常简单的案例。您有两个选择:编写您的函数来执行基本任务并并行化基本任务或使您的大函数运行72小时,并在不同输入上同时运行4个或更多。
您还需要确保进程不使用共享资源,或者您需要使用更复杂的实现。
最后,对生成大量数据的函数使用多处理可能会以内存错误(RAM不足)结束。这取决于应用程序。