【发布时间】:2018-07-10 17:25:09
【问题描述】:
在迁移到 channels2 之后,我仍在为 python 的“新”async/await 和 asyncio 苦苦挣扎。
首先,我尝试从文档中重现 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...
任何关于如何做到这一点的提示表示赞赏...
【问题讨论】:
-
您是说您的
print_info没有按预期运行吗?或者您是否收到任何错误?另外,在第 1 条消息完成之前不处理第 2 条消息是什么意思? -
没有错误,但我希望两个循环的交错输出从 1 计数到 10。相反,第一个计数甚至在我看到我的第二个传入消息和 then 第二个之前完成之后从 1 数到 10
标签: django python-asyncio django-channels