延迟消息不起作用



我试图通过延迟django通道中的组消息来模仿一个耗时的django响应,但它不起作用。

消费者很简单:

class ExportConsumer(JsonWebsocketConsumer):
...
def delayed_message(self, event):
print("In delayed")
time.sleep(5)
self.send(text_data=json.dumps({
'message': 'delayed!'
}))
def immediate_message(self, event):
print("In Immediate")
self.send(text_data=json.dumps({
'message': 'immediate_message!'
}))

在视图中,我只向一组发送两条消息-用于延迟和立即处理:


class DecisionListView(PaginatedListView):
...
def get(self, *args, **kwargs):
async_to_sync(get_channel_layer().group_send)(
'5e001793-18be-4a4b-8caf-c4a8144a11d2',
{
'type': 'immediate_message',
'message': 'message'
}
)
async_to_sync(get_channel_layer().group_send)(
'5e001793-18be-4a4b-8caf-c4a8144a11d2',
{
'type': 'delayed_message',
'message': 'message'
}
)
return super().get(*args, **kwargs)

"即时消息"已传递。我在终端上得到了In delayed(这意味着它到达了delayed_message,但消息从未被传递(除非我注释掉time.sleep.

我做错了什么?

更新::AsyncJsonWebsocketConsumer不能正常工作:

consumers.py:

class ExportConsumer(AsyncJsonWebsocketConsumer):
...
async def delayed_message(self, event):
await asyncio.sleep(5)
await self.send(text_data=json.dumps({
'message': 'whatever'
}))

views.py:


class DecisionListView(PaginatedListView):
...
def get(self, *args, **kwargs):
_group_send = get_channel_layer().group_send
_sync_group_send = async_to_sync(_group_send)
_sync_group_send('5e001793-18be-4a4b-8caf-c4a8144a11d2',{"type":'delayed_message', 'message':'hello'})
return super().get(*args, **kwargs)

更新2:

唯一对我有效的是asyncio.create_task:



class ExportConsumer(AsyncJsonWebsocketConsumer):
async def delayed_task(self):
await asyncio.sleep(5)
await self.channel_layer.group_send(
self.room_group_name,
{
'type': 'chat_message',
'message': 'LATER'
}
)
async def delayed_message(self, event):
asyncio.create_task(self.delayed_task())
await self.send_json('NOW')
async def chat_message(self, event):
message = event['message']
await self.send_json(message)

您应该使用AsyncJsonWebsocketConsumer和异步方法,然后可以使用asyncio中的睡眠方法。

time.sleep将阻止您的整个服务器。

--不相关的您应该发送delayed.message而不是delayed_message(当调用函数时,通道用_代替.(

相关内容

最新更新