转到channels2之后,我仍在努力处理python的“新”异步/等待和异步。
首先,我尝试从文档中复制Worker and Background Tasks,但后来我意识到我的任务应该只作为简单的async
函数运行。
所以,我的测试功能是
async def replay_run(self, event):
print_info("replay_run", event, self.channel_name)
import asyncio
for i in range(10):
await asyncio.sleep(1)
print_info("replay_run-",i, event, self.channel_name)
以及async def receive_json(self, event)
内部的以下两个调用
似乎阻止了后续传入消息的立即处理。
版本1:
await self.channel_layer.send(
self.channel_name, {
"type": "replay_run", "sessionID": msg["sessionID"]
})
版本2:
await self.replay_run(msg)
首先,我想到了版本1,因为我认为我需要注册一个await asyncio.gather
之类的“新事件使用者” ...
任何有关如何正确执行此操作的提示都值得赞赏...
答案 0 :(得分:0)
在这里找到解决方案:django.channels async consumer does not appear to execute asynchronously
显然是
版本3:
asyncio.ensure_future( self.replay_runit(msg) )
...为了安排“长时间运行的协程”而不阻塞通道。