Python 2.7 Tornado 5.1.1 从另一个线程发送WebSocket消息

Python 2.7 Tornado 5.1.1 send WebSocket messages from another thread

我有 Python2.7 的最新龙卷风。我将它用作 websocket 服务器。由于它称自己为“异步网络库”(见下文),因此很自然地假设可以异步发送消息。我该怎么做?

 pip show tornado
---
Metadata-Version: 2.0
Name: tornado
Version: 5.1.1
Summary: Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.
Home-page: http://www.tornadoweb.org/
Author: Facebook
Author-email: python-tornado@googlegroups.com

我的问题是关于 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 has no attribute 'asyncio_loop'

我也尝试了 add_callback 函数,因为在其他函数中有评论说“使用 add_callback 将控制转移到 IOLoop 的线程”,这听起来正是我想要的......但是它似乎什么也没做(我的回调没有被调用。)

我也试过用互斥锁简单地调用 write_message,甚至每次都从同一个线程 ,但这不起作用:tornado 偶尔(并且仅在中等负载下)从主线程(“事件循环”)调用 iostream 并通过在没有锁的情况下同时访问它来破坏它。

Python2.7版本安全调度异步事件的功能是什么?

我想我找到了我的问题。 tornado.ioloop.IOLoop.instance() 只需调用一次,并保存值。 start()add_callback().

需要使用相同的值

(但是如果基本的IOLoop已经启用了异步事件,那么为什么人们在新版本中使用asyncio_loop模块?这个软件包有些可疑。看起来很复杂。)