首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待和异步,协程从未被等待过

等待和异步,协程从未被等待过
EN

Stack Overflow用户
提问于 2021-02-15 10:01:20
回答 2查看 617关注 0票数 2

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

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

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

代码语言:javascript
复制
RuntimeWarning: 
coroutine 'wizlight.turn_on' was never awaited`
  light.turn_on(PilotBuilder(brightness = 255))

下面是代码:

代码语言:javascript
复制
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())

有人能让它工作吗?我总共有两个脑细胞,所以我不能。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-27 06:06:29

好的,我设法弄清楚发生了什么,我把这个问题留在这里,以防其他人试图用python3.6中的pywizlight做类似的事情。我的问题是我一直收到大量的错误,但主要是我遇到了我无法创建任务的问题,这是因为它是python 3.6。创建任务模块是在python 3.7中实现的。修复这个问题的方法是在包本身中,特别是在python文件"bulb.py“中。将第210、217、295和306行中的"asyncio.create_task“更改为"asyncio.ensure_future”后,运行以下代码:

代码语言:javascript
复制
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())

灯会打开,关闭,再次打开,但作为一种颜色,然后关闭。我希望这能帮助那些想要完成和我类似的事情的人。

票数 1
EN

Stack Overflow用户

发布于 2021-02-25 11:02:03

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

代码语言:javascript
复制
async def turn_off():
    light = wizlight("ip address of wiz bulb")
    await light.turn_on(PilotBuilder(brightness = 255))

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

我无法测试它,因为我没有wizlight,但您可能会发现只创建了一个事件循环,并使用它从turn_off执行异步任务。

代码语言:javascript
复制
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答案更详细地解释了正在使用的event loop

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66201921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档