【问题标题】:Efficient way to wait in python without using input()?在不使用 input() 的情况下在 python 中等待的有效方法?
【发布时间】:2019-01-04 09:29:26
【问题描述】:

我有一个 python 脚本,我在其中使用来自另一个库的侦听器来等待并侦听发生的事件(然后我的脚本会处理该事件)。在开发中,我在脚本末尾使用 input() 语句(在 while True 循环内)来有效地保持脚本处于活动状态,同时什么都不做(除了等待事件)。但是,既然我已将其放入 systemd 服务中,那么 input() 会因 EOF 而失败,因为预计系统服务不会有任何控制台 IO。在这里实现本质上无限循环的“好”或pythonic方式是什么?我可以做一个while True: passwhile True: sleep(0.1),但第一个会烧毁CPU,而第二个看起来很hackish。

【问题讨论】:

标签: python wait


【解决方案1】:

查看coroutines的官方文档。

例子:

import time, asyncio

async def run_task():
    for i in range(5):
        print('running task %d' % i)
        await awaiting_task(i)

async def awaiting_task(name):
    time.sleep(5) # wait for 5 seconds
    print('task %s finished' % str(name))

asyncio.run(run_task())

async 语法会将函数转换为协程,如果可能,它会节省您的 CPU,而不是忙于等待。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2013-11-16
    • 1970-01-01
    • 2013-07-22
    • 2020-02-23
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多