我在 Windows 10 下使用 Django 3.2.2 和 Daphne 3.0.2、Python 3.8.9。
Daphne 作为 django-channels 的 ASGI 服务器,在我的 consumer.py 频道文件中,我需要访问数据库 ORM。所以我需要使用包装器,因为数据库访问应该是“同步”,这是代码:
def _get_fattura(pk):
return Fatture.objects.select_related('debitore').get(pk=pk)
fatt = await sync_to_async(_get_fattura, thread_sensitive=True)(pk=idfattura)
在我通过 Webbsocket (django-channels) 响应将我的反馈发送回客户端之后:
response = {
"step": "DEBUG",
"message": "Dopo sync_to_async"
}
await self.send(text_data=json.dumps(response))
在 LINUX 下,一切都按预期运行,我在客户端异步获取 websocket 消息。在 Windows 下,只有当整个服务器功能已完成,因此“同步”时,我最终才会收到 websocket 消息。
我觉得应该和达芙妮在windows下处理事件循环的方式有关。有没有办法让它在 Windows 下像在 LINUX 下一样以 sema 方式工作?