![](/img/trans.png)
[英]Send message using Django Channels from outside Consumer class
[英]Group send a channel layer from outside consumer class
我有一個進程,當它收到消息時,它會向 celery 進程發送命令。 從那里我想從 celery 工作人員向后端發回一條消息,告訴它“我現在完成了,你可以繼續”。 那么我可以從外部向通道層發送群組消息嗎
編輯可能還應該添加一些代碼示例:
消費者.py
async def startGame(self):
if self.leader:
songList = await self.getSongs()
await self.downloadSongs(songList)
任務.py
@shared_task
def downloadSongs(songList, room_group_name):
from channels.layers import get_channel_layer
print(room_group_name)
for song in songList:
if not os.path.isfile("./songfiles/" + song["song_id"] + ".mp3"):
print("Downloading song: " + song["title"])
channel_layer = get_channel_layer()
print(channel_layer)
async_to_sync(channel_layer.group_send)(
room_group_name,
{
'type': 'startGameGroup',
})
print("Done sleeping")
消費者.py
async def startGameGroup(self, event):
await self.send(text_data=json.dumps({
"ContentType": "startGameGroup",
}))
因此,當消費者運行中的 startGame 時,它會調用名為 downloadSongs 的 celery 任務。 從那里它應該向后端發送一條消息,說它已經完成並且可以開始游戲了
請注意,當您遇到此錯誤時,您不能將通道層設置為 InMemoryChannel,我建議您改用 redis,這解決了我的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.