考え方は、worker.connect
ワーカーでバックグラウンドタスクを実行することです。タスクの実行中に、通知グループを介して接続されたクライアントにその進捗状況を送信したいと思います。Djangoチャンネルのメッセージがすぐに送信されるようにするにはどうすればよいですか?
問題:通知グループに送信されるメッセージは、作業者のタスクが終了するまで遅延します。したがって、5秒の遅れ(sleep(5)
)の後に、クライアントで両方のメッセージ 'Start'と 'Stop'が同時に表示されます。私は、メッセージ 'Stop'に続いて5秒の遅延が続く 'Start'というメッセージを期待しています。なぜこれが当てはまらないのでしょうか?
私は、次の3つのプロセスが実行されている:
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,
}