当前位置: 首页 > 知识库问答 >
问题:

每天在同一时间做某事的Python脚本[duplicate]

周泰
2023-03-14

我有一个长期运行的python脚本,我想在每天早上1:00做一些事情。

我一直在研究sched模块和Timer对象,但我不知道如何使用它们来实现这一点。

共有3个答案

罗伟志
2023-03-14

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/

通过将其构建到正在调度的函数中,您可以让它调度另一次运行。

祝允晨
2023-03-14

你可以这样做:

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()
慕容劲
2023-03-14

我花了相当多的时间也在寻找在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”)以重复通