簡體   English   中英

Python - 使用等待的 function Asyncio 的返回變量

[英]Python - Using the return variable of an awaited function Asyncio

我正在編寫一個小型 class,當我收到來自 mqtt 代理的“ON”消息時,它應該能夠打開燈。 我遇到的問題是conn() function 連接並檢索消息,而on_message() function 等待這個。 我無法使用該消息,因為我正在等待它,並且我無法在等待中找到解決方案(通常你只需執行message = conn() ,當conn()返回消息時)。 下面的代碼是嘗試之一:

class SpaceCode:

    def __init__(self, subscription, broker):
        self.subscription = subscription
        self.broker = broker

    def turn_off(self, message):
        pass

    async def conn(self):
        async with Client(self.broker) as client:
            async with client.filtered_messages(self.subscription) as messages:
                await client.subscribe(self.subscription)
                async for message in messages:
                    return message

    async def main(self):
        try:
            await asyncio.wait_for(self.movement_detected(), timeout=900)
        except asyncio.TimeoutError:
            turn_off(topic)

    async def movement_detected(self):
        await self.on_message()

    async def on_message(self):
        await self.conn()
        message = self.conn()
        if "ON" in str(message.payload.decode("utf-8")):  
            return str(message.payload.decode("utf-8"))

然后它返回的錯誤是“AttributeError:'coroutine' object 沒有屬性有效負載”,這是有道理的,我使用了一個我沒有等待的協程,但即使只是執行await message = self.conn()也會導致錯誤。

感謝@NobbyNobbs,解決方案是等待協程並同時將其分配給變量。 我的版本:

await self.conn()
message = self.conn()

正確的版本:

await message = self.conn()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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