2012-04-10 43 views
2

我有一個觀看Web服務請求的工作區python腳本。客戶每次向我的Web服務提交作業時,都會在衆所周知的位置創建唯一的作業文件夾。我有一個腳本在沒有「標誌」的情況下輪詢這個衆所周知的文件夾位置(一個具有特定名稱的空白文本文件,表明該作業的處理已完成)。呼叫蟒蛇工人腳本的多個實例

現在我的腳本可以調用工人腳本來處理新的文件夾的內容,但必須等到工人腳本執行完畢後才能進行移交的文件夾了。

我的問題是什麼是選擇有instatiated工人腳本的新實例,並返回控制經理。會創建一個python可執行文件,它接受工作者腳本的參數並讓管理者腳本通過命令行工作嗎?或者將工作者腳本創建爲一個可以有多個工作流程處理工作的類?

一旦工人腳本完成它並不需要消息給管理員腳本任務完成。它會通過將文本文件放入目錄來完成此操作。雖然現在我想想,我將不得不某處認爲,每個作業目錄已經交了,因爲這將需要1.5分鐘工人腳本來處理。

任何意見/鏈接,將不勝感激。

回答

0

首先,我同意您需要在您的目錄中放置一個標誌,表示目錄是正在處理的。主腳本應該是唯一設置標誌的人員,否則您將面臨競爭條件(兩個工作人員腳本同時處於同一目錄)。你可以使用相同的文件;主腳本將其創建爲空(意爲「進行中」),工作人員腳本在其中寫入1B(意思是「完成」)。這樣,主腳本只需檢查標誌的存在。

回到你的問題:

  • 你確實可以讓你的工人腳本到一個獨立的程序,並通過 subprocess模塊調用它;

  • 你可以使它成爲一個線程(與threading模塊[2]), 這是更容易編碼; 由於 GIL, ,這可能效率很低,但是如果您的工作腳本高度IO限制,它不應該是太多的問題;

  • 如果你使用Python 3,你可能想看看 multiprocessing模塊[3]
    這是我從來沒有使用過,但似乎沒有易受 到GIL混合線程的可用性;它似乎並不是完全可移植的。

希望這有助於

  • [1] http://docs.python.org/library/subprocess.html
  • [2] http://docs.python.org/library/threading.html
  • [3] http://docs.python.org/dev/library/multiprocessing.html