等待和异步,协程从未被等待
Await and async, coroutine was never awaited
所以基本上我正在尝试编写一个可以通过 python 脚本控制 wiz 灯的程序。由于其他限制,我正在使用 python 3.6。这是我用来连接到 wizlight 的 pywizlight 项目的 link。
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个,所以我不能。
您是否尝试添加 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 答案更详细地解释了 的使用。
好的,我设法弄清楚发生了什么,我把这个问题留在这里以防其他人试图在 python 3.6 中用 pywizlight 做类似的事情。我的问题是我不断收到大量错误,但主要是我 运行 遇到无法创建任务的问题,这是因为它是 python 3.6。创建任务模块在 python 3.7 中实现。解决这个问题的方法是在包本身中,特别是在 python 文件“bulb.py”中。在第 210、217、295 和 306 行中将“asyncio.create_task
”更改为“asyncio.ensure_future
”后,运行 以下代码:
async def turn_off():
light = wizlight("your wiz light ip address here")
await light.turn_on(PilotBuilder(brightness = 255))
await light.turn_off()
await light.turn_on(PilotBuilder(rgb = (0, 128, 255)))
await light.turn_off()
loop = asyncio.get_event_loop()
loop.run_until_complete(turn_off())
灯会打开,关闭,再次打开但作为一种颜色,然后关闭。我希望这可以帮助那些正在尝试完成与我所做的类似事情的人。
所以基本上我正在尝试编写一个可以通过 python 脚本控制 wiz 灯的程序。由于其他限制,我正在使用 python 3.6。这是我用来连接到 wizlight 的 pywizlight 项目的 link。
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个,所以我不能。
您是否尝试添加 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 答案更详细地解释了
好的,我设法弄清楚发生了什么,我把这个问题留在这里以防其他人试图在 python 3.6 中用 pywizlight 做类似的事情。我的问题是我不断收到大量错误,但主要是我 运行 遇到无法创建任务的问题,这是因为它是 python 3.6。创建任务模块在 python 3.7 中实现。解决这个问题的方法是在包本身中,特别是在 python 文件“bulb.py”中。在第 210、217、295 和 306 行中将“asyncio.create_task
”更改为“asyncio.ensure_future
”后,运行 以下代码:
async def turn_off():
light = wizlight("your wiz light ip address here")
await light.turn_on(PilotBuilder(brightness = 255))
await light.turn_off()
await light.turn_on(PilotBuilder(rgb = (0, 128, 255)))
await light.turn_off()
loop = asyncio.get_event_loop()
loop.run_until_complete(turn_off())
灯会打开,关闭,再次打开但作为一种颜色,然后关闭。我希望这可以帮助那些正在尝试完成与我所做的类似事情的人。