2016-05-18 73 views
7

我創建一個Django的web服務器,它允許用戶在本地計算機上運行一些「可執行文件」,並通過網頁來分析它們的輸出。芹菜與ProcessPoolExecutor /的ThreadPoolExecutor

我以前使用的芹菜任務隊列,以便在類似情況下運行「可執行文件」。然而,Python的concurrent.futures讀了之後,我開始懷疑我是否應該使用ThreadPoolExecutor,或ProcessPoolExecutor(或ThreadPoolExecutor一個ProcessPoolExecutor內:d)呢?

谷歌搜索我只能找到one relevant question芹菜比較龍捲風,並轉向到單獨使用龍捲風。

所以我應該用芹菜或PoolExecutor我簡單的網絡服務器,爲什麼?

回答

4

你需要的,如果用芹菜:

  1. 你想從你的網絡服務器
  2. 你想輕鬆,獨立地擴展的方式來監控你的任務並重試他們,如果他們失敗
  3. 你想創建更高級的任務執行模式(例如鏈接它們)

除了這是一個非常成熟的庫,其中有側面項目,可以幫助您在UI呈現方面,也可以看看Jobtastic

如果您不需要任何列出的點,你只需要而不關心到很多關於狀態和不擴展性不僅僅是保持簡單的特殊需要來執行這個任務。

關於使用ThreadPoolExecutorProcessPoolExecutor請記住,第二個將只能接收和返回可拾取對象,並且第一個會產生連接到主進程的子線程(如果您沒有在內部使用它,可能是您的web服務器另一個分離的過程),所以混合它們的方法可以根據您實現的細節來理解。