Python Tornado websocket异步写入消息

Python Tornado websocket异步写入消息,python,asynchronous,websocket,tornado,python-asyncio,Python,Asynchronous,Websocket,Tornado,Python Asyncio,我希望以一种不会阻止任何其他请求发生的方式将来自各种传感器的数据流传输到tornado中,并提出了我认为允许我这样做的方法,但现在遇到了以下问题: TypeError:object Timestamp不能用在'wait'表达式中 我通过各种线程寻找解决方案,主要是: 所讨论的基本代码: class ListenerHandler(WebSocket): executor = ThreadPoolExecutor() async def on_message(self, se

我希望以一种不会阻止任何其他请求发生的方式将来自各种传感器的数据流传输到tornado中,并提出了我认为允许我这样做的方法,但现在遇到了以下问题:

TypeError:object Timestamp不能用在'wait'表达式中

我通过各种线程寻找解决方案,主要是:

所讨论的基本代码:

 class ListenerHandler(WebSocket):

    executor = ThreadPoolExecutor()

    async def on_message(self, sensor):

        sensor = get_single_actor(sensor)

        sensor.listen(lambda data: IOLoop.current().run_in_executor(
            self.executor, self.write_message(str(data))))

        while True:
            await world.wait_for_tick()
我不确定这个块中的各种事情是否需要更多的上下文,因为在阅读之后,我感觉这可能只是一个需要处理的一般python异步事情,要点是:需要运行无限循环,而不是块请求


在it阶段,我正式进入掷镖阶段。

wait
语句中只能使用协同程序<代码>等待勾号()需要是一个协同程序。您得到错误是因为它不是。协同程序是使用
async def
语句定义的函数。因此,通过使用
async def
定义函数,将
wait\u for_tick()
函数转换为协同程序。感谢您的响应!wait_for_tick()实际上来自一个包。我能做些什么鬼鬼祟祟的事情来绕过它吗?或者我必须深入其中并将其定义为异步吗?如果
wait\u tick()
不是一个协同程序,那么就没有必要在
wait
语句中使用它
WAIT
语句用于暂时挂起循环,直到协同路由返回值。但是由于
wait_for_tick()
只是一个常规函数,它会立即返回一个值,而
while
循环将继续运行而不会挂起。但是,如果您仍然希望以这种方式使用它,那么您可以创建一个单独的协程并返回
wait_for_tick()
,而不是直接调用
wait_for tick()
来自该协同程序。然后您可以在
await
语句中使用此协同程序。但正如我所说,它不会真正使您的代码异步。您可以告诉我们更多您试图实现的目标,我们可以为您提供更好的解决方案。您需要切换到公开异步接口的库,或者(ab)使用线程等待阻塞代码。在后一种情况下,您可以
wait loop.run\u In\u executor(executor,world.wait\u for\u tick
)。