Идея состоит в том, чтобы запустить фоновую задачу на worker.connect
воркере. При выполнении задачи я хотел бы отправить ее ход подключенному клиенту через группу уведомлений.
Проблема: сообщения, отправленные в группу уведомлений, задерживаются до завершения задачи на воркере. Итак: оба сообщения 'Старт' и 'Стоп' появляются на клиенте одновременно, с задержкой в 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
In views.py
:
def run(request, pk):
Channel('worker.connect').send({'pk': pk})
return HttpResponse(status=200)
In 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)
In 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,
}