我有两个函数,function1和function2。我想只执行function1 5秒,然后只执行function2 3秒,然后重复。
我尝试了time.sleep()函数,但是它冻结了整个程序,没有执行任何函数。
我尝试asyncio和线程,但它只是同时执行两个函数。
def function1():
//do something
def funtion2():
//do something else
while True:
function1()
// execute function1 for 5 seconds
function2()
// execute function2 for 3 seconds
你需要多精确?您是否需要考虑函数本身的运行时?那可真不容易。
这里有一个简单的方法:
import time # built-in module
def timed_execution(func, s, *args, **kwargs):
t0 = time.time()
while True:
func(*args, **kwargs)
if time.time() - t0 >= s:
break
timed_execution(function1, 5)
timed_execution(function2, 3)
如果你想更花哨一点,并且你的函数需要执行的时间总是一样的,你可以使用一个装饰器:
import time
def timer(s):
def timed_func(func):
def timed_execution(*args, **kwargs):
t0 = time.time()
while True:
func(*args, **kwargs)
if time.time() - t0 >= s:
break
return timed_execution
return timed_func
@timer(5)
def function1():
pass
@timer(3)
def function2():
pass
如果您想在一定时间内使用带有参数的装饰器,但只是选择性地使用,则需要做更多的工作。查看如何使用条件装饰器。