我有一个django应用程序,在服务器上进行一些计算,最多可能需要30秒。我正在尝试使用django频道来创建进度指示器。
我的设置基于本教程: https://realpython.com/blog/python/getting-started-with-django-channels/
到目前为止,一切都按预期工作。我通过网络套接字提交任务。这是由我的消费者接收的,它调用其他方法来完成任务,然后通过websocket返回结果。
但是,当我尝试从同一个消费者发送多条消息时,所有消息都会在最后一起到达,而不是在发送时到达。
这是我的消费者代码:
@channel_session
def ws_receive(message):
data = json.loads(message['text'])
reply_channel = message.reply_channel.name
Channel(reply_channel).send({
"text": json.dumps({'progress': 'Starting Work'})
})
# calls outside method to do work
result = perform_calculations(data, reply_channel)
Channel(reply_channel).send({
"text": json.dumps({'progress': 'Finished Work','result':result })
})
在这个例子中,我的前端收到了“开始工作”。和完成的工作'消息同时发生,即使它们之间存在30秒的差距。
有没有办法让这些讯息实时到达?
答案 0 :(得分:3)
是的,您可以使用立即参数。
Channel(message.reply_channel).send({
"text": json.dumps({'progress': 'Starting Work'})
}, immediately=True)
还提到了:
How do I ensure a Django Channels message is sent immediately without delay?
答案 1 :(得分:1)