我们的想法是在worker.connect
worker 上运行后台任务.执行任务时,我希望通过通知组将其进度发送到已连接的客户端.
问题:发送到通知组的消息会延迟,直到工作人员上的任务完成.因此:在延迟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, }
小智.. 6
您可以immediately=True
将该参数添加为该send
函数.根据消息来源:
发送延迟到消费者完成.要覆盖它,您可以立即传递= True.
https://github.com/django/channels/blob/master/channels/channel.py#L32
您可以immediately=True
将该参数添加为该send
函数.根据消息来源:
发送延迟到消费者完成.要覆盖它,您可以立即传递= True.
https://github.com/django/channels/blob/master/channels/channel.py#L32