Python脚本每天在同一时间做些事情

我有一个长期运行的python脚本,我想在每天凌晨1:00做点什么。

我一直在寻找调度模块和计时器对象,但我看不出如何使用这些来实现这一目标。

你可以这样做:

 from datetime import datetime from threading import Timer x=datetime.today() y=x.replace(day=x.day+1, hour=1, minute=0, second=0, microsecond=0) delta_t=yx secs=delta_t.seconds+1 def hello_world(): print "hello world" #... t = Timer(secs, hello_world) t.start() 

这将在第二天下午1点执行一个函数(例如hello_world)。

我花了不less时间在01:00发起一个简单的Python程序。 出于某种原因,我不能让cron发布它,而APScheduler似乎相当复杂,应该很简单。 附表( https://pypi.python.org/pypi/schedule )似乎是正确的。

你将不得不安装他们的Python库:

 pip install schedule 

这是从他们的示例程序中修改的:

 import schedule import time def job(t): print "I'm working...", t return schedule.every().day.at("01:00").do(job,'It is 01:00') while True: schedule.run_pending() time.sleep(60) # wait one minute 

你将需要把自己的function放在工作的地方,并用nohup来运行,例如:

 nohup python2.7 MyScheduledProgram.py & 

如果重新启动,请不要忘记重新启动它。

APScheduler可能是你以后的事情。

 from datetime import date from apscheduler.scheduler import Scheduler # Start the scheduler sched = Scheduler() sched.start() # Define the function that is to be executed def my_job(text): print text # The job will be executed on November 6th, 2009 exec_date = date(2009, 11, 6) # Store the job in a variable in case we want to cancel it job = sched.add_date_job(my_job, exec_date, ['text']) # The job will be executed on November 6th, 2009 at 16:30:05 job = sched.add_date_job(my_job, datetime(2009, 11, 6, 16, 30, 5), ['text']) 

https://apscheduler.readthedocs.io/en/latest/

您可以通过将其构build到您正在计划的function中来安排另一次运行。

我需要类似的任务。 这是我写的代码:它计算第二天,并将时间更改为所需的任何时间,并findcurrentTime和下一个计划的时间之间的秒。

 import datetime as dt def my_job(): print "hello world" nextDay = dt.datetime.now() + dt.timedelta(days=1) dateString = nextDay.strftime('%d-%m-%Y') + " 01-00-00" newDate = nextDay.strptime(dateString,'%d-%m-%Y %H-%M-%S') delay = (newDate - dt.datetime.now()).total_seconds() Timer(delay,my_job,()).start()