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 秒后在两个功能之间切换的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QPushbutton 的两个功能之间来回切换?

如何在云功能中的两个 Firebase 项目之间切换? [复制]

Firebase 函数在 10 秒后在客户端提供超时

根据传递给存储过程的参数在两个游标之间切换

如何在耳机的两个芽之间切换音频输出

dos下执行bat文件,如何让两个命令之间自动延迟3秒后再继续执行?