簡體   English   中英

Python 2.7多處理無需使用緩沖池即可獲得處理結果

[英]Python 2.7 multiprocessing get process result whithout using pool

在不使用池的情況下如何從過程中獲得結果?

(我願意留意進展情況:

(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萬。

我看到了這個線程我可以從multiprocessing.Process獲取返回值嗎? 我試圖重現它,但無法使其正常工作。

供您進一步了解。

這個問題可以被認為是重復的,但無論如何,這是我的問題的解決方案:

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)

最簡單的方法應該是將隊列作為參數傳遞給函數。 該函數的結果可以放入該隊列中,以后您可以遍歷該隊列以收集所有結果或在結果到達后立即對其進行處理。 但是,僅當您可以使用“無序”結果時,它才起作用。 有關詳細信息,請參見Python文檔: 多處理和隊列示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM