2015-05-12 17 views
2

如何在不使用池的情況下從我的進程中獲取結果?Python 2.7多處理程序在沒有使用池的情況下獲得處理結果

(我願意在發展保護眼睛:

(print "\r",float(done)/total,"%",) 

不能使用池來完成,據我所知)

def multiprocess(function, argslist, ncpu): 
    total = len(argslist) 
    done = 0 
    jobs = [] 
    while argslist != []: 
     if len(mp.active_children()) < ncpu: 
      p = mp.Process(target=function,args=(argslist.pop(),)) 
      jobs.append(p) 
      p.start() 
      done+=1 
      print "\r",float(done)/total,"%", 
    #get results here 
    for job in jobs: 
     job.get_my_result()??? 

的過程是非常短的(< 0.5秒),但我有大約100萬。

我看到此線程Can I get a return value from multiprocessing.Process?我試圖重現它,但我無法使它正常工作。

在您的整個處置任何進一步的信息。

+1

當你嘗試從其他曲的解決方案,會發生什麼estion? – SuperBiasedMan

回答

2

這個問題可以被認爲是一個重複的,但反正這裏是解決我的問題:

def multiprocess(function, argslist, ncpu): 
    total = len(argslist) 
    done = 0 
    result_queue = mp.Queue() 
    jobs = [] 
    while argslist != [] and done<10 : 
     if len(mp.active_children()) < ncpu: 
      p = mp.Process(target=function,args=(result_queue, argslist.pop(),)) 
      jobs.append(p) 
      p.start() 
      done+=1 
      print "\r",float(done)/total,"%", 
    #get results here 
    res = [result_queue.get() for p in jobs] 
    print res 

,我不得不改變以及對

return function_result 

result_queue.put(function_result) 
1

最簡單的方法應該是作爲參數傳遞給函數的隊列。該函數的結果可以放入該隊列中,稍後您可以迭代該隊列以收集所有結果或在結果到達時立即對其進行處理。但是,只有當您可以使用「無序」結果時纔有效。詳情請參閱Python文檔:Examples for Multiprocessing and Queues

+0

在所有這些例子中游泳後,我找到了自己的方式,Thanx :) – Trolldejo