由于GIL的存在,python中的多線程其實并不是真正意義上的多線程,前面一篇文章Python中的多線程與多進程那些事中提到I/O密集型使用多線程并發執行提高效率、計算密集型使用多進程并行執行提高效率。
針對計算密集型的任務,我們如何通過多進程提高效率?
Window下的multiprocessing分布式計算
基于multiprocessing、queue等模塊實現簡易的分布式計算框架。服務節點負責任務的派發和任務結果的采集,工作節點分布在同一電腦的不同進程,或者其他電腦上,負責任務執行和結果反饋,服務節點與工作節點通過Queue實現數據共享(任務下發、結果反饋)。
其中包含Task、MaterWork、SlaveWork三個模塊,大體介紹及源碼如下:
Task模塊
根據任務需求,將自己的任務單獨封裝在task模塊中。
MaterWork(主節點/服務節點)
負責任務派發和結果采集,主從節點通過Queue實現任務、結果共享。代碼中注釋中已介紹的較清楚,這里不做贅述。
SlaveWork(從節點/計算節點)
使用說明
#添加待處理任務,實際應用過程添加的任務可以為函數的參數
foriinrange(0,10):
task=Task(i).computer()
print'Dispatchjob:{0}'.format(i)
dispatched_jobs.put(task)
將從節點計算模塊發送至不同電腦,啟動從節點即實現分布式計算,即N個從節點消費服務節點分發任務,并返回任務執行狀態、結果。
若對你有幫助,點贊支持一下。