📜  相当于 setInterval python (1)

📅  最后修改于: 2023-12-03 15:41:00.563000             🧑  作者: Mango

相当于 setInterval Python

在 JavaScript 中,我们经常使用 setInterval 函数来重复执行代码。但是,Python 中没有这个函数,那么怎么办呢?下面介绍几种在 Python 中实现 setInterval 的方法。

使用 threading.Timer
import threading

def setInterval(func, sec):
    def func_wrapper():
        setInterval(func, sec)
        func()
    t = threading.Timer(sec, func_wrapper)
    t.start()
    return t

这个方法使用了 Python 自带的 threading.Timer 类。它会在指定的秒数后执行一个函数。这个函数又会调用 setInterval,从而实现了重复执行。

使用方法如下:

def my_func():
    print("Hello, world!")
    
interval = setInterval(my_func, 2)

上面的代码会每两秒输出一次 Hello, world!,并且会在一个新的线程中执行。

使用 asyncio
import asyncio

def setInterval(func, sec):
    async def func_wrapper():
        while True:
            await asyncio.sleep(sec)
            func()
    asyncio.ensure_future(func_wrapper())

这个方法使用了 Python 自带的 asyncio.sleep 函数。它会在指定秒数后暂停程序的执行,然后再继续执行。这个函数会像 setInterval 一样无限地循环调用自己。

使用方法如下:

async def my_func():
    print("Hello, world!")
    
setInterval(my_func, 2)
asyncio.get_event_loop().run_forever()

上面的代码会每两秒输出一次 Hello, world!,并且会在一个事件循环中执行。需要注意的是,这个写法需要在 Python 3.4 及以上版本才能使用。

结论

以上是两种在 Python 中实现 setInterval 的方法。它们各有优缺点,选择哪种方法取决于你的具体需求。在使用 setInterval 的时候需要注意内存泄漏的问题,及时清理不再需要的计时器对象,避免资源浪费。