协调线程计时器与每个块中的特定分钟

时间:2017-03-06 19:19:02

标签: python multithreading time

我是线程的总菜鸟,所以我很抱歉,如果这是微不足道的 - 我无法在threading docs 中找到任何解决方案

假设我有一个函数f()

def f():
    print('do the useful things!')

我想在初次通话时执行,以及在首次通话后每隔10分钟的第3和第8分钟执行。 如何使用线程进行设置?

我知道如果我希望在初次通话后每五分钟执行一次这个功能,我可以做类似的事情

import threading

def f():
    print('do the useful things!')
    threading.Timer(60*5, f).start()

但是我很难评估如何在第3和第8分钟轻松调整时间。真的,这只会涉及对齐 next 执行 - 也就是说,如果我最初在8:01调用该函数,那么我的任务只是确保下一次执行是在8:03之后后续的执行将是8:08,8:13等。( threading.Timer 很容易

一种" hack" -ish看似解决方案是使用标志来识别第一个函数调用 - 当首次调用函数时,获取当前分钟与第三个或第八个之间的差异即将到来的分钟... time.sleep表示差异,然后使用threading.Timer。这个问题是time.sleep将阻止我整个进程的执行 - 这需要在另一个线程上。感觉就像在这里使用threading.Timer更容易,而不是构建我自己的线程类,但我不确定。

1 个答案:

答案 0 :(得分:-1)

使用计时器事件来执行您的功能(比如每5秒钟一次)。第一次通过计时器事件执行您的功能,无论如何,在每个后续事件测试第3或第8分钟的时钟时间。如果是正确的时间,就做功能。否则退出计时器事件并等待再次输入。如果您在事件中输入了以防止计时器事件在您处理完最后一个事件之前触发,请确保设置一个标志。退出定时器事件代码时清除输入的标志。