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

回答

相關問題