第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么 ZeroMQ 輪詢器不接收消息(python)?

為什么 ZeroMQ 輪詢器不接收消息(python)?

SMILET 2024-01-27 14:39:46
我正在嘗試在 python 中使用Poller()帶有兩個套接字的 ZeroMQ 功能:import zmq# Prepare our context and socketscontext = zmq.Context()receiver = context.socket(zmq.DEALER)receiver.connect("ipc:///tmp/interface-transducer")subscriber = context.socket(zmq.SUB)subscriber.bind("ipc:///tmp/fast-service")subscriber.setsockopt(zmq.SUBSCRIBE, b"10001")# Initialize poll setpoller = zmq.Poller()poller.register(receiver, zmq.POLLIN)poller.register(subscriber, zmq.POLLIN)# Process messages from both socketswhile True:    try:        socks = dict(poller.poll())    except KeyboardInterrupt:        break    if receiver in socks:        message = receiver.recv()        print("RECEIVER OK\n")    if subscriber in socks:        message = subscriber.recv()        print("SUBSCRIBER OK\n")然后發(fā)送消息的服務(wù)器ROUTER描述為:def main():    context = zmq.Context()    router = context.socket(zmq.ROUTER)    router.bind("ipc:///tmp/interface-transducer")    while True:        identity = b'electrode-service'        b_identity = identity        router.send_multipart([b_identity, b'[1,2]'])        print("Sent")        time.sleep(1)if __name__ == "__main__":    main()但是當(dāng)我運(yùn)行這兩個進(jìn)程時,它沒有按預(yù)期工作,輪詢器腳本不會打印任何內(nèi)容。這樣的實(shí)施可能會出現(xiàn)什么問題?
查看完整描述

1 回答

?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個贊

“這樣的實(shí)施可能會出現(xiàn)什么問題?”

  • .poll()由于僅使用&.recv()方法的阻塞形式,這種實(shí)現(xiàn)很容易出現(xiàn)死鎖并失敗

  • 在多個對等點(diǎn)連接到實(shí)現(xiàn)循環(huán)傳入/傳出流量映射的接入點(diǎn)的情況下,這種實(shí)現(xiàn)的自我防御能力不夠

  • .recv()這種實(shí)現(xiàn)方式是非常錯誤的,因?yàn)樵谶@種情況下,只調(diào)用一個單獨(dú)的代碼.send_multipart()是非常錯誤的,在這種情況下,會發(fā)出驚人的警告,需要進(jìn)行多部分消息處理

  • ipc://Transport Class 很容易隱藏與操作系統(tǒng)相關(guān)的用戶級代碼限制(由操作系統(tǒng)對路徑名的格式和長度以及對 R/W/X 的有效用戶權(quán)限進(jìn)行設(shè)置)

  • ipc://對于 O/S 服務(wù)尚未創(chuàng)建目標(biāo)地址的情況,傳輸類.connect()方法的使用取決于順序(.bind()需要首先成功)

  • 最后但并非最不重要的一點(diǎn)是,任何.bind()對同一ipc://傳輸類目標(biāo)的下一次嘗試都會默默地破壞您ROUTER對消息傳遞/信令平面基礎(chǔ)設(shè)施的預(yù)期訪問,并且您的實(shí)現(xiàn)已經(jīng)花費(fèi)了零努力來自我保護(hù)和自我診斷錯誤,這些錯誤可能會默默地發(fā)生出現(xiàn)在“幕后”

Zeromq 不應(yīng)該自動處理死鎖嗎?我嘗試使用zeromq指南mspoller中給出的示例如果我不能同時使用.poll()和recv(),我應(yīng)該如何使用ZMQ Poller結(jié)構(gòu)?– hao123


ZeroMQ zen-of-zero 注重性能+低延遲,因此請考慮將預(yù)防阻塞的所有應(yīng)有注意都掌握在您自己的手中(根據(jù)需要和需要的地方,核心庫永遠(yuǎn)不會比實(shí)現(xiàn)幾乎線性可擴(kuò)展性能的目標(biāo)所需的)。

不,
自由使用.poll()- 和 -.recv()方法,但完成它以適應(yīng)非阻塞方式 -.poll( 0 )并添加主動檢測+多部分消息的處理(再次,最好以非阻塞方式,使用zmq.NOBLOCK選項(xiàng)標(biāo)志,其中合適的 )。自阻塞會使代碼失控。


查看完整回答
反對 回復(fù) 2024-01-27
  • 1 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號