我有一個Python應用程序(帶GUI,使用PyQt4),由用戶在幾個實例中產生。該應用程序是用來執行一些長時間運行的任務(約幾個小時到幾天),所以我願意加上一個額外的「監控」應用程序,將做這樣的事情:Python進程間通信
- 找出所有正在運行的進程其他應用程序的
- 獲得運行中的操作的狀態(完成工作,百分比,錯誤消息,...)
- 最終發送一些命令到應用程序告訴他們暫停,恢復,終止,...
一種適合這項工作的方法是RPyC,唯一的問題,它似乎只能在TCP套接字上工作,就像我找到的大多數RPC庫一樣。但是這導致必須打開幾個不需要的套接字,這些套接字只在本地主機上偵聽,並且必須創建某種端口分配機制以避免兩個進程試圖在同一個端口上偵聽。然後監視器需要一個端口列表來寫入某個地方,或者去查找在TCP端口上偵聽的進程,並試圖找出它們是否是正確的應用程序或ot實例。聽起來像一團糟。
管理互通的最好方法我現在想到的可能是在'/var/run/myapp/myapp-.sock'中有一些unix套接字,然後創建一個模塊所有骯髒的東西暴露了一些方法,如listMyApps()
和getMyApp(pid)
返回第一個pid列表,第二個可用於與該應用程序通信的對象。
現在,我正在尋找最好的方法來實現這個目標。 真的,沒有任何東西可以通過unix套接字管理RPC嗎?聽起來有點奇怪,但我無法找到任何可以裝配的東西。
有什麼建議嗎?
注:我不想扭轉的東西(應用程序是一個單一的監控服務器的客戶端),以避免問題的監測應用程序崩潰的情況下,並讓我自由地創建連接到這些插座其他應用程序並提出請求。
注:安全不是一個問題,因爲所有這些東西是在私人運行,關閉防火牆和網絡:),再加上,請求由只有受信任的用戶在本地主機上完成的。
我的意思是什麼,我不不想在每個進程的不同端口上設置監聽套接字..我想到了信號,但是它們絕對不足以滿足我需要,因爲我需要按順序在各種應用函數上運行方法以查詢其狀態(不僅完成百分比,但更復雜的細節),或執行一堆操作「就好像用戶點擊XYZ用戶界面按鈕」一樣.. – redShadow 2011-02-07 22:47:57