我想複製ZMQ指南中描述的呼吸機/工人/水槽範例。我擁有與ZMQ示例中描述的相同的Python呼吸機,相同的C++工作人員以及相同的Python接收器。我想從一個主python腳本啓動呼吸機,工作人員和接收器,因此我在通風器周圍創建了「類」包裝,並且這兩個類都是Python模塊「multiprocessing.Process」的子類。由於C++是一個二進制文件,我使用Python的subprocess.Popen調用來啓動它。zmq呼吸機/工人/水槽範例不工作瓦特/子流程
啓動所有的這件事的順序如下:
h = subprocess.Popen('test') # test is the name of the binary
time.sleep(1)
s = sinkObj.start()
time.sleep(1)
v = ventObj.start()
什麼我發現是沒有數據通過該系統獲取,當我開始了這樣的組件。但是,如果我在其自己的shell中啓動C++二進制文件,並且只從主python腳本啓動sinkObj和ventObj,則它工作正常。
如果這是一個Python問題而不是ZMQ問題,我提前表示歉意,但是我還沒有遇到類似這樣的問題,因爲它有Python的子進程。我也嘗試使用os.system()而不是子進程...但同樣的問題。我把所有的代碼放在這個網站上:https://github.com/kkarrancsu/zmqtest如果有人想好好測試一下。這個git有一個自述文件,告訴你這些文件是什麼。
關於爲什麼會發生這種情況的任何想法?
------------------------- UPDATE --------------------
我發現如果我創建一個簡單啓動C二進制文件的shell腳本,並調用該shell腳本w/os.system('run_the_shell_script'),它就可以工作!所以這意味着我使用subprocess.Popen(...)的方式出了問題,但似乎無法查明問題所在。我嘗試了w/the shell = True標誌,但它仍然掛着...
我試着通過移動'subprocess.Popen'代碼(啓動調用'connect()'後啓動呼吸機和接收機(綁定)的C++二進制文件,但仍然是相同的問題。直到我用'subprocess.Popen'從python啓動C++二進制文件 –