亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python中的進程間通信

Python中的進程間通信

HUWWW 2019-09-20 17:26:38
在兩個不同的python進程之間進行進程間通信的干凈而優雅的方法是什么?我目前在操作系統中使用命名管道,但感覺有點hacky。我用dbus服務重寫了我的東西,但是看起來當通過SSH會話遠程運行代碼時,它現在嘗試初始化X11,這對于我想做的事情來說似乎完全沒有必要(它們與GUI無關)。所以也許dbus有點太重量了。我正準備再次使用套接字進行重新設計,但它看起來很低級,所以我認為可能有一個更高級別的模塊我可以導入和使用,我根本就不知道它的名字,我想我應該問SO第一..我的要求是能夠運行python foo.py并讓這個過程就像守護進程那樣做,并且能夠向它發送消息python foo.py --bar。后一個調用應該只是向現有進程發送一個消息并終止,可能帶有0成功的返回代碼或其他失敗的代碼(因此需要進行一些雙向通信)。
查看完整描述

3 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

該multiprocessing庫提供了包裝套接字的偵聽器和客戶端,允許您傳遞任意python對象。


您的服務器可以偵聽接收python對象:


from multiprocessing.connection import Listener


address = ('localhost', 6000)     # family is deduced to be 'AF_INET'

listener = Listener(address, authkey='secret password')

conn = listener.accept()

print 'connection accepted from', listener.last_accepted

while True:

    msg = conn.recv()

    # do something with msg

    if msg == 'close':

        conn.close()

        break

listener.close()

您的客戶端可以發送命令作為對象:


from multiprocessing.connection import Client


address = ('localhost', 6000)

conn = Client(address, authkey='secret password')

conn.send('close')

# can also send arbitrary objects:

# conn.send(['a', 2.5, None, int, sum])

conn.close()


查看完整回答
反對 回復 2019-09-20
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

我會用套接字; 本地通信得到了極大的優化,因此您不應該遇到性能問題,并且如果需要,您可以將應用程序分發到不同的物理節點。


關于“低級”方法,你是對的。但您可以根據需要始終使用更高級別的包裝器。XMLRPC可能是一個很好的候選者,但對于你正在嘗試執行的任務來說可能有些過分。


Twisted提供了一些很好的協議簡單實現,例如LineReceiver(用于簡單的基于行的消息)或更優雅的AMP(順便說一句,標準化和以不同語言實現)。


查看完整回答
反對 回復 2019-09-20
  • 3 回答
  • 0 關注
  • 656 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號