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