由于我是Python的新手,我需要有经验的人提供一些建议。使用核心Python库,每隔T分钟从时间A到时间B运行Python方法的最佳方法是什么?
更具体一点:
我需要单线程应用程序,它将启动监视文件对的时间戳,以确保文件创建的差异始终大于0.我需要每2分钟从9到6运行此监视器。我将看看时间表和时间库......
答案 0 :(得分:1)
你可以:
使用cron(on * nix)或Windows任务计划程序在所需的时间运行脚本。
它将使您的解决方案更简单,更强大。
或
将您的脚本作为守护程序运行并订阅文件系统事件以监控您的文件。
根据您的操作系统,您可以使用pyinotify等。它为变更时间提供了最好的反应
基于时间,线程,计划模块的解决方案更复杂,更难实现,可靠性更低。
答案 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)
它将等到开始日期并运行该函数直到结束日期。可能会有一些额外的错误检查取决于您正在做什么。现在它所做的只是检查无效条目,例如开始日期大于结束日期。您所要做的就是指定日期和时间。希望这会有所帮助。
编辑: 啊,我看到你用额外的要求更新了你的问题。这种方法可能对你不起作用。