2017-01-16 79 views
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, 
} 

回答