x 秒后在两个功能之间切换
Posted
技术标签:
【中文标题】x 秒后在两个功能之间切换【英文标题】:toggling between two functions after x seconds 【发布时间】:2021-12-15 05:47:33 【问题描述】:我有两个函数,function1 和 function2。我想只执行function1 5秒,然后执行function2 3秒然后重复。
我尝试了 time.sleep() 函数,但它冻结了整个程序而不执行任何函数。
我尝试了异步和线程,但它只是同时执行两个函数。
def function1():
//do something
def funtion2():
//do something else
while True:
function1()
// execute function1 for 5 seconds
function2()
// execute function2 for 3 seconds
【问题讨论】:
“执行函数 x 秒”是什么意思?您希望函数执行一次然后暂停最多 x 秒,还是希望函数重复执行直到 x 秒过去? 我想重复执行函数 x 秒 【参考方案1】:您需要精确到什么程度?您是否需要考虑函数本身的运行时间?这将是相当困难的。
这是一个简单的方法:
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
如果您想在一段时间内使用带参数的装饰器,但只是可选的,您需要做更多的工作。见how to do a conditional decorator。
【讨论】:
以上是关于x 秒后在两个功能之间切换的主要内容,如果未能解决你的问题,请参考以下文章