3
这个想法是在worker.connect
worker上运行后台任务。在执行任务时,我想通过通知组将其进展发送给连接的客户端。如何确保Django频道消息立即发送?
问题:发送到通知组的消息被延迟,直到该工作器上的任务完成。因此:在延迟5秒后(sleep(5)
),客户端上同时出现'开始'和'停止'消息。我希望消息'开始',然后是5秒延迟,然后是'停止'消息。任何想法为什么不是这样?
我有以下三个过程运行:
daphne tests.asgi:channel_layer
python manage.py runworker --exclude-channel=worker.connect
python manage.py runworker --only-channel=worker.connect
在views.py
:
def run(request, pk):
Channel('worker.connect').send({'pk': pk})
return HttpResponse(status=200)
在consumers.py
:
def ws_connect(message):
Group('notifications').add(message.reply_channel)
message.reply_channel.send({"accept": True})
def worker_connect(message):
run_channel(message)
在views.py
:
def run_channel(message):
Group('notifications').send({'text': 'Start'})
sleep(5)
Group('notifications').send({'text': 'Stop'})
routing.py
channel_routing = {
'websocket.connect': consumers.ws_connect,
'worker.connect': consumers.worker_connect,
}