2017-02-03 34 views
-2

嗨,我有一個使用SocketServer模塊的服務器/客戶端模型。服務器作業是從客戶端接收測試名稱並啓動測試。 使用子流程模塊啓動測試。 我希望服務器不斷回答客戶端和任何新的作業堆積在一個列表或隊列中,並一個接一個啓動,唯一的限制是服務器不應該啓動測試,除非當前正在運行一個完成。Python。線程

感謝

+1

您的問題是什麼? – ForceBru

+0

請把你的工作機會放在SO的「工作」部分。 –

+0

請參閱[Tour](// stackoverflow.com/tour)並閱讀[幫助中心](// stackoverflow.com/help)中的文檔。特別是,你應該閱讀[如何提出一個好問題](// stackoverflow.com/help/how-to-ask)以及哪些問題[關於主題](// stackoverflow.com/help/on -topic)在這裏。 –

回答

0

您可以使用該模塊

multiprocessing
開始新進程。在服務器端,您將擁有一個引用當前正在運行的進程的變量。您仍然可以運行SocketServer並接受請求並將它們存儲在列表中。每秒鐘(或任何你想要的),在另一個線程中,你會通過調用isAlive()來檢查當前進程是否已經死了。如果它已經死了,那麼只需在列表中運行下一個測試。

另一種方式(更好)是,在第三個線程(檢查的線程)上,從進程調用.join(),以便它只會在當前進程調用下一行代碼已經死了。這樣你就不必每秒鐘都檢查一遍,而且效率更高。

0

你可能想要做的是:在服務器套接字

  1. 獲取測試名稱,把它放在一個Queue
  2. 在一個單獨的線程,讀取測試的名字從隊列逐個
  3. 執行該過程並等待它結束使用communicate()
  4. 保持輪詢隊列進行新測試,如果測試名稱可用,則重複步驟2,3如果測試名稱可用
  5. 同時服務器繼續接收並將測試名稱放入隊列中