如何每隔t分钟从时间a到时间b运行一个方法

时间:2012-10-10 17:09:26

标签: python timer schedule

由于我是Python的新手,我需要有经验的人提供一些建议。使用核心Python库,每隔T分钟从时间A到时间B运行Python方法的最佳方法是什么?

更具体一点:

我需要单线程应用程序,它将启动监视文件对的时间戳,以确保文件创建的差异始终大于0.我需要每2分钟从9到6运行此监视器。我将看看时间表和时间库......

4 个答案:

答案 0 :(得分:1)

你可以:

  1. 使用cron(on * nix)或Windows任务计划程序在所需的时间运行脚本。

    它将使您的解决方案更简单,更强大。

  2. 将您的脚本作为守护程序运行并订阅文件系统事件以监控您的文件。

    根据您的操作系统,您可以使用pyinotify等。它为变更时间提供了最好的反应

  3. 基于时间,线程,计划模块的解决方案更复杂,更难实现,可靠性更低。

答案 1 :(得分:0)

起初认为这样的事情对你有用:

import time

# run every T minutes
T = 1
# run process for t seconds
t = 1.

while True:
    start = time.time()

    while time.time() < (start + t):
        print 'hello world'

    print 'sleeping'
    # convert minutes to seconds and subtract the about of time the process ran
    time.sleep(T*60-t)

但是可能有更好的方法,确切地知道你想要完成什么

答案 2 :(得分:0)

import time

#... initislize  A, B and T here

time.sllep(max(0, A - time.time()) # wait for the A moment

while time.time() < B:
    call_your_method()
    time.sleep(T)

答案 3 :(得分:0)

这就是你追求的吗?

import time
from datetime import datetime

def doSomething(t,a,b):
    while True:
        if a > b:
            print 'The end date is less than the start date.  Exiting.'
            break
        elif datetime.now() < a:
            # Date format: %Y-%m-%d %H:%M:%S
            now = datetime.now()
            wait_time = time.mktime(time.strptime(str(a),"%Y-%m-%d %H:%M:%S"))-\
                        time.mktime(time.strptime(str(now), "%Y-%m-%d %H:%M:%S.%f"))
            print 'The start date is',wait_time,'seconds from now.  Waiting'
            time.sleep(wait_time)
        elif datetime.now() > b:
            print 'The end date has passed.  Exiting.'
            break
        else:
            # do something, in this example I am printing the local time
            print time.localtime()
            seconds = t*60  # convert minutes to seconds
            time.sleep(seconds) # wait this number of seconds

# date time format is year, month, day, hour, minute, and second
start_date = datetime(2012, 10, 10, 14, 38, 00)
end_date = datetime(2012, 10, 10, 14, 39, 00)
# do something every 2 minutes from the start to end dates
doSomething(2,start_date,end_date)

它将等到开始日期并运行该函数直到结束日期。可能会有一些额外的错误检查取决于您正在做什么。现在它所做的只是检查无效条目,例如开始日期大于结束日期。您所要做的就是指定日期和时间。希望这会有所帮助。

编辑: 啊,我看到你用额外的要求更新了你的问题。这种方法可能对你不起作用。