簡體   English   中英

恢復傳遞給multiprocessing.Process的函數的返回值的最快方法

[英]Fastest way to recover the return value of a function passed to multiprocessing.Process

我有大量的批處理工作,因此將其切成30個(CPU的數量)迷你批處理,並進行了30個multiprocessing.Process來完成它們(由於某些原因,我沒有使用multiprocessing.Pool )。 對於返回值,我使用了30 multiprocessing.Queue 這是我的代碼的概述:

    def minibatch(q, data, i):
        do_some_work_data_i
        q.put(return_value)

    if __name__ == '__main__':
        q1 = Queue()
        p1 = Process(target=minibatch, args=(q1, data[1], 1))
        p1.start()

        q2 = Queue()
        p2 = Process(target=minibatch, args=(q2, data[2], 2))
        p2.start()

        first_return_value = q1.get()
        second_return_value = q2.get()

        p1.join()
        p2.join()

現在,我發現它太慢了! 如果每個小批處理都需要10秒,我希望我的代碼可以花大約10秒來運行,但是要花更多的時間。 那我該怎么辦呢?

運行時順序

processing time * number of runs

運行時並行

(processing time) * (number of runs / number of parallel processes) 
+ (process start overhead * number parallel processes) 

如果開始時您的處理時間不長,那么進行新流程的開銷將超過您從並行處理中獲得的節省。

如果您的順序批處理需要大約300秒,那么並行實現可能只需要不到11秒,但是如果您的順序批處理只需要10秒,那么在30個進程上運行它可能實際上會花費更長的時間。

暫無
暫無

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

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