【问题标题】:Python 2.7 Tornado 5.1.1 send WebSocket messages from another threadPython 2.7 Tornado 5.1.1 从另一个线程发送 WebSocket 消息
【发布时间】:2021-08-23 02:09:48
【问题描述】:

我有最新的 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

This question has been asked for Python 3 already.我的问题是关于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 函数,因为其他函数中有 cmets 说“使用 add_callback 将控制权转移到 IOLoop 的线程”这听起来正是我想要的......但它似乎没有做任何事情(我的回调没有被调用。)

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

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

【问题讨论】:

    标签: multithreading python-2.7 tornado


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多