Man*_*att 9 django websocket python-3.x django-redis django-channels
我在控制台日志上收到此错误,并且在表单提交时它会不断加载,但不会将数据发布到服务器。
Run Code Online (Sandbox Code Playgroud)/home/Python/Working/Benutzerverwaltung/env/lib/python3.6/site-packages/channels/sessions.py:183> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fab9fe51408>()]>> for connection <WebSocketProtocol client=['127.0.0.1', 59462] path=b'/ws/stream/Sales'> took too long to shut down and was killed.
这是我关闭通道的代码。
/home/Python/Working/Benutzerverwaltung/env/lib/python3.6/site-packages/channels/sessions.py:183>
wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at
0x7fab9fe51408>()]>> for connection <WebSocketProtocol
client=['127.0.0.1', 59462] path=b'/ws/stream/Sales'> took too long to
shut down and was killed.
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
Ben*_*els 10
这个错误主要是因为协程的停留时间超过了应有的时间。
这个具体案例
在这种情况下,AsyncWebsocketConsumer.websocket_disconnect()正在被覆盖但没有调用super(),这意味着它StopConsumer()没有运行(请参阅channels/generic/websocket.py:228)。也许根本不要覆盖websocket_disconnect,因为这个例子中没有任何东西可以证明它是合理的。
另请注意,它async_to_sync适用于同步消费者,但这是一个异步消费者。而是使用:
await self.channel_layer.group_discard(
self.room_group_name,
self.channel
)
Run Code Online (Sandbox Code Playgroud)
不需要await self.close(),因为断开连接已经发生。删除该行。
异步Http消费者
类似地,AsyncHttpConsumer我经常犯的错误是调用await self.send_response(...)但随后忘记调用return,因此该函数将在您不期望的时候继续运行。
AsyncHttpConsumer还有一个关于未在handle(). 当前唯一的选择是添加额外的打印/日志记录行来找出正在运行/未运行的内容。
当心 django-debug-toolbar
另外值得注意的是,添加debug-toolbar到您的INSTALLED_APPS意志中会消除异步消费者中的异常。请参阅此处的讨论。谨防!
| 归档时间: |
|
| 查看次数: |
12908 次 |
| 最近记录: |