首页 > 解决方案 > 等待和异步,协程从未被等待

问题描述

所以基本上我正在尝试编写一个可以通过python脚本控制wiz light的程序。由于其他限制,我正在使用 python 3.6。这是我用来连接到 wizlight 的 pywizlight 项目的链接。

https://pypi.org/project/pywizlight/

我知道代码说它只能在 python 3.7 及更高版本中工作,但是我想知道是否有可能让它在 3.6 中工作。我知道,如果您没有 wiz 灯(也许),可能很难对此进行测试。当我运行它时,我收到以下错误消息:

RuntimeWarning: 
coroutine 'wizlight.turn_on' was never awaited`
  light.turn_on(PilotBuilder(brightness = 255))

这是代码:

import pywizlight
import asyncio
from pywizlight import wizlight, PilotBuilder, discovery

async def main():
    loop = asyncio.get_event_loop()
    task = loop.create_task(turn_off())
    await task

async def turn_off():
    light = wizlight("ip address of wiz bulb")
    light.turn_on(PilotBuilder(brightness = 255))

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

任何人都可以让它工作吗?我总共有大约 2 个脑细胞,所以我不能。

标签: pythonasync-awaitcoroutine

解决方案


您是否尝试过添加await指令?

async def turn_off():
    light = wizlight("ip address of wiz bulb")
    await light.turn_on(PilotBuilder(brightness = 255))

编辑:解决评论中的其他问题

因为我没有 wizlight,所以我无法对其进行测试,但您可能会发现仅创建一个事件循环并使用它来执行来自turn_off.

async def turn_off():
    light = wizlight("ip address of wiz bulb")
    await light.turn_on(PilotBuilder(brightness = 255))

loop = asyncio.get_event_loop()
loop.run_until_complete(turn_off())

这个其他 SO 答案更详细地解释了正在使用的事件循环。


推荐阅读