0

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

更加具体:

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

4

4 回答 4

1

你可以:

  1. 使用 cron(在 *nix 上)或 Windows 任务调度程序在所需时间运行您的脚本。

    它将使您的解决方案更简单、更健壮。

    或者

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

    您可以根据您的操作系统使用 pyinotify 等。它提供了对变化时间的最佳反应

基于时间、线程、调度模块的解决方案更复杂、更难实现且可靠性更低。

于 2012-10-10T18:45:41.883 回答
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)

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

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

于 2012-10-10T18:42:22.173 回答
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)

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

于 2012-10-10T17:56:45.460 回答
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)
于 2012-10-10T18:33:23.153 回答