我想將ZeroMQ掛鉤到gevent循環。使用ZeroMQ API,我可以爲套接字獲取一個fd。我如何在greenlet中觀看這個套接字來處理POLLIN事件,而不會阻塞其他greenlet?在gevent上的fd上傾聽POLLIN
2
A
回答
2
退房GEVENT-zeromq在github/PyPI中
0
這裏是例如,從ZeroMQ。請求回覆代理http://zguide.zeromq.org/py:rrbroker 它監聽POLLIN事件,並且使用gevent-zeromq不會阻塞其他線程。
做這個你在找什麼?
1
# for gevent >= 1.0
hub = gevent.get_hub()
watcher = hub.loop.io(fd, 1) # 1 = READ, 2 = WRITE, 3 = READ|WRITE
hub.wait(watcher)
# fd is now ready for reading
但是,如果想知道如何使用gevent-zeromq或擴展它來支持您的用例,那將會更好。
相關問題
- 1. 傾聽聽衆
- 2. 在模型的屬性上傾聽具體的值更改
- 3. 在Glassfish上傾聽JNDI的變化 - 如何查看EventContext?
- 4. 傾聽活動
- 5. 傾聽jQuery中
- 6. 在django上測試gevent-socketio
- 7. epoll fd和pmoll上的epoll_wait
- 8. epoll:區分「偵聽器」FD
- 9. 在Web3j中傾聽事件
- 10. Spotify的應用:傾聽「訂閱」事件上的播放列表
- 11. Winsock2在fd 0(stdin)上的select()失敗
- 12. 在fd上實現的計時器
- 13. 傾聽Chrome擴展
- 14. 讓Tornado傾聽Django
- 15. 傾聽進程Erlang
- 16. 傾聽所有CFNotifications?
- 17. gevent多個StreamServer偵聽器
- 18. knockout.js和傾聽複選框上的檢查事件
- 19. 傾聽紮根設備上的其他應用程序事件
- 20. 在z軸上傾斜android
- 21. 停止傾聽更多傾聽者事件
- 22. epoll會通知所有進程在同一個fd上偵聽嗎?
- 23. 點上傾斜的橢圓
- 24. libcurl停留在POLLIN超時
- 25. 如何在Windows上安裝gevent?
- 26. 在x86_64上安裝gevent失敗:「undefined symbol:evhttp_accept_socket」
- 27. 在小牛上安裝gevent(Enthought Canopy python)
- 28. gevent在Ubuntu上安裝不正確
- 29. 在gevent gthreads上是否需要連接?
- 30. Android:RadioGroup - 傾聽點擊事件
是的,檢查出來,並感謝編寫它!不幸的是,它不符合我的利基需求。我可能會同時連接到我的XREP套接字的大量客戶端,其中很多客戶端可能會阻塞很長一段時間。因此我不能使用正常的zmq方法來連接N個工作套接字,因爲它不能縮放。我的解決方法是在XREP套接字上偵聽POLLIN,接收消息並在新的greenlet中處理它。一個greenlet將讀/寫同步到套接字。 AFAIK,在gevent-zeromq中我無法做到這一點。 – ysimonson
當然,只需要一個greenlet處理socket comm併產生新消息(並且可能使用Queue作爲inter-greenlet comm)。 – tmc
單個greenlet必須處理套接字上的發送和接收消息,因爲我不認爲你可以在zmq中同時執行這兩個消息。我不能只是在一個循環中使用recv(),因爲它會在有潛在的消息發送時阻塞。當它知道有一條可讀的消息時,它只需要recv()。 – ysimonson