[英]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.