回覆列表
  • 1 # 軟體測試開發技術棧

    由於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 啟動從節點後,可以在主節點執行介面,看到任務完成情況。

  • 中秋節和大豐收的關聯?
  • 捐腎後不能飲酒吸菸嗎?