在python中定时(类似Cron)的工作是精确的分钟标记

时间:2018-01-08 17:29:02

标签: python cron

我想每分钟运行一个进程,问题是我的进程需要5秒钟,因此,如果我安排作业每分钟运行一次,它每次都会被移动5秒钟。

所以,这就是我所拥有的:

import schedule

def job():
    print("Date and time: " + str(datetime.datetime.now())
    time.sleep(5) # I only put this here to emulate my 5 second lasting process 

schedule.every(1).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

我从另一篇文章中看到了这个解决方案,但我想更好地使用cron作业:

import time

while True:
    now = time.localtime()
    # Do what you need to do
    time.sleep(59 - now.tm_sec) #sleeps until roughly the next minute mark

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您想从Python管理作业(而不是通过您的系统cron本身),那么我建议您查看APScheduler

示例:

from __future__ import print_function

from time import sleep

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger

once_per_minute = CronTrigger('*', '*', '*', '*', '*', '*', '*', '0')
scheduler = BackgroundScheduler()

scheduler.start()

def my_func():
    print('hello!')

scheduler.add_job(my_func, trigger=once_per_minute)

sleep(180)

答案 1 :(得分:1)

你对cron有误解。

如果您安装此cron作业:

* * * * * /usr/bin/python /path/to/script.py

你会在你的剧本中这样做:

import datetime
import time

f = open('/tmp/cron_start_times.txt', 'a')
f.write("{}\n".format(datetime.datetime.now()))
time.sleep(5)

您会在第一分钟的第二分钟看到/tmp/cron_start_times.txt脚本已启动。正如其他人所说,你遇到的问题是,如果你的脚本花费超过60秒,它将并行运行2次或更多次。但如果那不是问题那么你就可以完成cron工作了。