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,
}