Python 脚本同时执行多项操作

标签 python

我正在尝试使用网络服务器让树莓派控制可寻址的 LED 灯带。因为我无法转发端口,所以网络服务器托管在 python 上的任何地方,并且 pi 不断发送 get 请求以查看是否需要更改照明。

某些灯光效果将有自己的计时,并且需要自行循环,例如彩虹效果,它将以 10Hz 循环并更新 LED 颜色。如何让脚本更新 LED 颜色,同时还必须发送获取请求? get 请求相对较慢,因此将它们放在同一个循环中似乎不是一个可行的选择。

编辑: 感谢您的回复。原来我正在寻找异步编程。

最佳答案

您可以使用 asyncio 非常简单地完成此操作。请注意,为了执行网络请求,您还应该使用异步库,例如 aiohttp 。否则,阻塞的 http 调用将延迟其他任务的运行。

下面是一个示例,其中您使用上下文对象来允许在不同任务之间共享数据。这两个任务都需要有一些 await 调用,这允许 asyncio 在正在运行的任务之间切换以实现并发。

import asyncio

class Context:
    def __init__(self):
        self.message = 0

async def report(context):
    while True:
        print(context.message)
        await asyncio.sleep(1)

async def update(context):
    while True:
        context.message += 1
        await asyncio.sleep(3)

async def main():
    context = Context()
    await asyncio.gather(report(context), update(context))

if __name__ == "__main__":
    asyncio.run(main())

关于Python 脚本同时执行多项操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71581123/

相关文章:

javascript - Flask JSON post 请求不起作用

python - 我在实例化期间传递给类的参数/kwargs __init__ 被忽略

python - 将一组 python 文件分发为单个可执行文件

python - 动态改变 scipys ndimage 过滤器中的过滤器大小

python - 隐藏工作表或有效隐藏 excel 选项卡的 Pandas to_excel?

python - 为什么训练集和后续评估的验证集 AUROC 不同?

python - 使用 OpenCV 检测灰色事物

python - 在 Python 中调用函数时是否总是必须引用包?

python - python 中嵌套循环的 pretty-print 输出

python - 将 OR 语句与 Python SLY 组合