【问题标题】:Pausing a called function for a few seconds暂停调用的函数几秒钟
【发布时间】:2019-12-30 17:34:53
【问题描述】:

我有一个连续循环的函数 F1(while 循环)。我设置了一个条件,如果满足,在函数 F1 中调用另一个函数 F2。一旦调用,函数 F2 不应该在几秒钟内再次调用,比如 3 秒,即使在 3 秒内再次满足条件。但是函数 F1 必须连续循环。如何实现?

【问题讨论】:

  • 你能分享你已经拥有的代码吗? time.sleep(3) 对你没有帮助吗?
  • @Axblet time.sleep() 无济于事,因为它会冻结脚本。
  • 很有趣,它会冻结整个脚本,而不仅仅是函数的范围?

标签: python


【解决方案1】:

调用 F2 时节省时间(比如 time_f2)。下次满足条件时,现在与time_f2比较,只有相差超过3秒才调用F2。

【讨论】:

  • time_f2 的范围仅限于 F1 的一个实例。再次调用 F1 后,time_f2 的值将与上次运行时不同。可以定义为全局变量。
【解决方案2】:

当然有更好的方法,但您可以使用 time.time() 观察至少 3 秒的差异并重置标志

import time
tf = 0
ti = 0
while 1:
    print('your_main_stuff()')
    yourcondition = True
    if yourcondition and tf==ti:
        print('do_your_stuff_once_at_3_sec()')
        count = True
        ti = time.time()
    if count:
        tf = time.time()
        if tf-ti>3:
            tf = time.time()
            ti = time.time()
            count = False   

【讨论】:

  • 稍微修改了你的代码就可以了!谢谢你:)
【解决方案3】:

您可以尝试以下方法。我为 F1 引入了新参数。在<condition met> 中,您将编写自己的条件。

from datetime import datetime

first_time_f2_call = True
time_f2_call = datetime.now()
while True:
    time_f2_call = f1(first_time_f2_call, time_f2_call)
    first_time_f2_call = False


def f1(first_f2_call, last_f2_call_time):
    if first_f2_call:
        time_diff = datetime.now() - datetime.now()
    else:
        time_diff = datetime.now() - last_f2_call_time

    if <condition met> and time_diff.seconds > 3:
        f2()
        last_f2_call_time = datetime.now()

    .
    .
    .
    return last_f2_call_time

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多