首页 > 解决方案 > 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

标签: python

解决方案


您需要精确到什么程度?您是否需要考虑函数本身的运行时间?那将是相当困难的。

这是一个简单的方法:

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

如果您想在一段时间内使用带有参数的装饰器,但只是可选的,您需要做更多的工作。看看如何做一个条件装饰器


推荐阅读