2013-11-03 45 views
0

初始問題herepython不同的子進程和通訊

我在我的python項目中有一個架構:主應用程序進程產生許多子進程。主進程監聽網絡連接,然後數據接收主進程將該數據傳遞給所有子進程而不相互監聽。子進程可能執行或不執行(取決於收到的)數據,如果他們需要執行操作 - 他們必須將消息發送到主進程,以便通過其網絡連接將數據發送到服務器。對於我的架構,我想,有一個回調體系結構通常可以實現observer pattern from head of four會很好。

我有一個進程不只是並行工作者 - 它是不同的子進程,可以對管道/隊列中的相同數據執行不同的操作,但是如果我將代碼調整到隊列中,那麼子進程必須使用task_queue.get()從父進程獲取數據,但是如果其中一個子進程將從task_queue獲取任何任務 - 其他子進程將不會收到該數據並且不會執行操作。我需要將task_queue中的每個任務傳遞給所有子進程,並從中收聽答案。

我已經試圖通過管道實現這個功能 - 但它需要大量數據(至少存儲管道),我不知道如何通過許多進程來實現管道功能 - 在任何地方我都看到了它的例子有一個管道,並且它是inifinite循環 - 因此我不能使用它,因爲主進程不知道此時要監聽哪個子進程(實際上只有一個子進程會執行某個動作)。

我也嘗試通過隊列來實現它 - 但是如果一個子進程會調用'task_queue.get()' - 它會從任務隊列中刪除這個項目,但我需要將這些數據傳遞給我的所有子進程。另外,在這兩種方法中,我需要監聽所有子進程,但是我希望作爲其操作的觀察者 - 如果某些子進程想要執行某個操作 - 將數據發送到主進程,然後在主進程中調用回調 - 功能和...

我早知道蟒蛇,請給我,我怎麼能知道這件事情的方式。

+0

Python的'select'模塊可以讓你等待許多管道I/O的一次。 – Barmar

回答

0

我建議在你生成n個子進程之前,在父進程中創建n個管道或隊列。然後每個子進程都有一個用於通信的管道或隊列。