【问题标题】:Execute task every so often within a process在流程中每隔一段时间执行一次任务
【发布时间】:2010-11-11 09:33:18
【问题描述】:

我想每 2 小时执行一次任务。 Python 有一个 Timer in Threading 模块,但它满足我的需要吗?如何自己生成合适的 Timer?

【问题讨论】:

  • 你是想每两小时执行一次任务,还是想让 Python 脚本每两小时执行一次?
  • 每2小时调用另一个python函数

标签: python timer


【解决方案1】:

如果您希望您的代码每 2 小时运行一次,最简单的方法是使用 cron 或 取决于您的操作系统的类似调度程序

如果您希望您的程序每 n 秒调用一次函数(在您的情况下为 7200) 您可以使用线程和 event.wait。以下示例启动一个计时器,该计时器 每秒触发一次并将字符串打印到标准输出

import threading
import time

class TimerClass(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.event = threading.Event()

    def run(self):
        while not self.event.is_set():
            print "do something"
            self.event.wait( 1 )

    def stop(self):
        self.event.set()

tmr = TimerClass()
tmr.start()

time.sleep( 10 )

tmr.stop()

【讨论】:

  • @wok 为什么? start 被调用一次并用于进行设置,run 是执行您想做的工作的方法
  • 我关于继承的错误。
  • @NikolausGradwohl:专家解决方案!我正在做类似的事情,但我没有使用事件,而是将一个 Queue 对象传递给该线程,如果超时,我将一些东西放入该队列,然后工作线程可以退出(工作线程不断检查队列,如果没有,则递增为测试目的加 1 的整数)。但是,在我运行我的程序后,工作线程会等待,但是当它退出时,我根本没有任何增量。知道发生了什么吗?谢谢。
【解决方案2】:

这可以解决.......

import time

    def fun1():
        print "Hi "

    while 1:

        fun1()
        time.sleep(5)

函数 fun1 将在每 5 秒后执行一次。但我不知道这是否是在特定时间后调用函数的好方法。这个解决方案有什么缺点吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多