由於GIL的存在,python中的多執行緒其實並不是真正意義上的多執行緒,前面一篇文章Python中的多執行緒與多程序那些事 中提到I/O密集型使用多執行緒併發執行提高效率、計算密集型使用多程序並行執行提高效率。
針對計算密集型的任務,我們如何透過多程序提高效率?
基於multiprocessing、queue等模組實現簡易的分散式計算框架。服務節點負責任務的派發和任務結果的採集,工作節點分佈在同一電腦的不同程序,或者其他電腦上,負責任務執行和結果反饋,服務節點與工作節點透過Queue實現資料共享(任務下發、結果反饋)。
其中包含Task、MaterWork、SlaveWork三個模組,大體介紹及原始碼如下:
根據任務需求,將自己的任務單獨封裝在task模組中。
負責任務派發和結果採集,主從節點透過Queue實現任務、結果共享。程式碼中註釋中已介紹的較清楚,這裡不做贅述。
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 啟動從節點後,可以在主節點執行介面,看到任務完成情況。
由於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 啟動從節點後,可以在主節點執行介面,看到任務完成情況。