簡體   English   中英

組從外部消費者 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM