我有一个非常有用的程序。因此,我希望让它更快并尝试进行多处理。当我让程序使用低分辨率时,它工作得很好(我正在做一个功率谱;低分辨率意味着它会很快完成,但它不会很准确)。我的速度提高了约 2 倍,但是在进行高分辨率时,我在它完成之前终止了它,在它运行了比使用单处理器更长的时间之后。
我的主文件是这样的(我已经定义了f_min,f_max,df,t,f
)
import multiprocessing as mp
from ast_power import power_spectrum
tasks = mp.cpu_count()
bound = mp.Queue()
res = mp.Queue()
mint = [mp.Process(target=power_spectrum,args=(t,f,bound,res)) for i in range(tasks)]
DF = (f_max-f_min)/tasks
for i in mint:
i.start()
for i in range(1,tasks+1):
a = i*f_min
b = a+DF
c = df
d = 1
bound.put([a,b,c,d])
for i in mint:
i.join()
fr,p = [],[]
while tasks:
frp,pp = res.get()
frp,pp = list(frp),list(pp)
fr += frp
p += pp
tasks -= 1
我的ast_power
样子是这样的
import numpy as np
def power_spectrum(time, data, param, R='None' ):
if R == 'None': #Normal
f_min = param[0]
f_max = param[1]
df = param[2]
w = param[3]
else: # Multiprocessing
f_min,f_max,df,w = param.get()
freq = np.arange(f_min,f_max,df)
for i in xrange( len(freq) ):
# Do the power spectrum...
# will produce; power, alfa, beta
if R == 'None': #Normal
return freq,power,alfa,beta
else: #Multiprocessing
R.put([freq,power,alfa,beta])
我做得对吗?我认为它适用于高分辨率df
(低分辨率)而不适用于低df
(高分辨率)是非常奇怪的。
非常感谢任何帮助。