0

我有一个非常有用的程序。因此,我希望让它更快并尝试进行多处理。当我让程序使用低分辨率时,它工作得很好(我正在做一个功率谱;低分辨率意味着它会很快完成,但它不会很准确)。我的速度提高了约 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(高分辨率)是非常奇怪的。

非常感谢任何帮助。

4

1 回答 1

1

join() 调用将阻塞进程直到它完成。如果您在运行下一个进程之前等待每个进程完成,您将失去多处理的好处!使用 start() 让进程独立运行。

于 2012-06-07T09:41:29.250 回答