我有Python2.7的最新龍卷風。我把它作為一個 websocket 服務器使用。既然它稱自己為 "異步網路庫"(見下文),自然可以認為可以異步發送訊息。我到底該怎么做呢?
pip show tornado
---
元資料-版本。2.0。
名稱:龍卷風
版本。5.1.1。
摘要:Tornado 是一個Python網路框架和異步網路庫,最初在FriendFeed開發。
主頁:http://www.tornadoweb.org/
作者。Facebook
作者電子郵件:[email protected]
這個問題已經有人問過Python 3了。我的問題是關于Python2.7。Python3的解決方案(tornado.ioloop.asyncio_loop.call_soon_threadsafe)在Python2.7中不起作用:
tornado.ioloop.asyncio_loop.call_soon_threadsafe(Send, srv, msg)
AttributeError: 'module' object沒有屬性'asyncio_loop'。
我還嘗試了add_callback函式,因為其他函式中的注釋說 "使用add_callback將控制權轉移到IOLoop的執行緒",這聽起來正是我想要的...但它似乎沒有任何作用(我的回呼沒有被呼叫)
我還嘗試了簡單地呼叫write_message與一個mutex鎖,甚至每次都從同一個執行緒,但這并不奏效。tornado偶爾(僅在中等負荷下)從主執行緒("事件回圈")呼叫iostream,并通過在沒有鎖的情況下并發訪問它來破壞它。
在Python2.7版本中,安全地安排異步事件的功能是什么?
在Python2.7版本中,安全安排異步事件的功能是什么?
uj5u.com熱心網友回復:
我想我找到了我的問題。tornado.ioloop.IOLoop.instance()只需要呼叫一次,并保存其值。這個相同的值需要被用于start()和add_callback()。
(但是,如果基本的 IOLoop 已經啟用了異步事件,那么為什么人們在較新的版本中使用 asyncio_loop 模塊?這個軟體包有一些可疑之處。它看起來非常復雜。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/309361.html
標籤:
