0

我在 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 方式工作?

4

0 回答 0