我想每分钟运行一个进程,问题是我的进程需要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
谢谢!
答案 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工作了。