python - x 秒后在两个功能之间切换
问题描述
我有两个函数,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
解决方案
您需要精确到什么程度?您是否需要考虑函数本身的运行时间?那将是相当困难的。
这是一个简单的方法:
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
如果您想在一段时间内使用带有参数的装饰器,但只是可选的,您需要做更多的工作。看看如何做一个条件装饰器。
推荐阅读
- ios - [反应原生][ios] 'MODULE_NOT_FOUND',@react-native-community/cli
- c# - Blazor 中的 FirebaseAuthentication 未生成带有声明的主体
- reactive-programming - RSocket 是第五代响应式框架吗?
- android - 大家好,如何在 React Native Home Button Pressed 上实现 PiP(画中画)视频?我无法在 React Native 中正确显示画中画视频
- python - 未找到 np.argsort() 实现
- scikit-learn - 岭回归的 predict() 方法的代码在哪里
- c# - HttpToSocks5Proxy | 底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系
- xampp - 如何禁用 XAMPP 或 PHP 缓存?
- vue.js - BpmnJS 抛出错误:TypeError: proxy must report the same value for the non-writable, non-configurable property '"$pkg"'
- laravel - Codeception 或单元测试不拾取更改