我有一个长期运行的python脚本,我想在每天早上1:00做一些事情。
我一直在研究sched模块和Timer对象,但我不知道如何使用它们来实现这一点。
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/
通过将其构建到正在调度的函数中,您可以让它调度另一次运行。
你可以这样做:
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=y-x
secs=delta_t.seconds+1
def hello_world():
print "hello world"
#...
t = Timer(secs, hello_world)
t.start()
这将在第二天凌晨1点执行一个函数(例如hello_world)。
编辑:
正如@PaulMag所建议的,更一般地说,为了检测是否由于月底的到来而必须重置月日,在这种情况下,y的定义应如下所示:
y = x.replace(day=x.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)
使用此修复程序,还需要向导入添加时间增量。其他代码行保持相同。因此,也使用total_seconds()函数的完整解决方案是:
from datetime import datetime, timedelta
from threading import Timer
x=datetime.today()
y = x.replace(day=x.day, hour=1, minute=0, second=0, microsecond=0) + timedelta(days=1)
delta_t=y-x
secs=delta_t.total_seconds()
def hello_world():
print "hello world"
#...
t = Timer(secs, hello_world)
t.start()
我花了相当多的时间也在寻找在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
你需要把你自己的函数放在作业的地方,并用nohup运行它,例如:
nohup python2.7 MyScheduledProgram.py &
如果您重新启动,请不要忘记再次启动它。
问题内容: 我有一个运行很长时间的python脚本,我想每天早上01:00做一些事情。 我一直在查看sched模块和Timer对象,但看不到如何使用它们来实现此目的。 问题答案: 您可以这样做: 这将在第二天凌晨1点执行一个函数(例如hello_world)。 编辑: 正如@PaulMag所建议的,更一般而言,为了检测是否必须由于该月末到达而必须重置该月的某天,在此上下文中y的定义应为: 使用此修
这是我的报警器 公共类OneShotAlarm扩展BroadcastReceiver toast.Maketext(context,r.string.one_shot_received,toast.length_long).show();MediaPlayer mp=MediaPlayer.create(context,r.raw.azan2);mp.start();
问题内容: 可以说我想做一个循环或每秒打印出来的内容,例如“ Mario”。我怎样才能做到这一点?似乎找不到任何可以在任何地方教授此内容的优秀教程= P 问题答案: 您可以使用java.util.Timer。 任务是您要执行的方法,之后是直到第一次执行的时间,间隔是上述任务的两次执行之间的时间。
问题内容: 我有一个时间戳记,我想知道是否有办法在PST中将其舍入到一天的开始。例如,ts:对应于,但是我想将其舍入为一个映射到的时间戳。我读了time.Time文档,但没有找到解决方法。 问题答案: 执行此操作的简单方法是使用上一个创建新内容,并且仅分配年份的月份和日期。看起来像这样; 这是一个表演例子;https://play.golang.org/p/jnFuZxruKm
问题内容: 我有一个sql代码,可以获取每个员工的总工作时间及其超时时间。我想计算他当天的总加班时间。你能帮我吗?8小时是每天的常规时间。 这是代码 样品输出 我想要的是这样的 问题答案: 你可以做这样的事情 这是 SQLFiddle 演示 您需要为提供真正的默认值,并针对当他们。在一个极端的情况下,如果s是由员工有一天到另一天回家而造成的,那么这些默认值可能分别是和,因为您要计算每个日历日的加班
问题内容: 我是iOS开发的新手,但是已经创建了该应用程序,并且我试图在设定的时间创建每日通知。当前,通知针对给定的日期/时间执行一次。我不确定如何使用repeatInterval方法每天进行调度。每天重复通知的最佳方法是什么?任何帮助将不胜感激(是)。 问题答案: 您必须提供NSCalendarUnit值(例如“ HourCalendarUnit”或“ DayCalendarUnit”)以重复通