Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用计划在特定时间运行作业_Python_Schedule - Fatal编程技术网

Python 使用计划在特定时间运行作业

Python 使用计划在特定时间运行作业,python,schedule,Python,Schedule,我正试图安排一些工作,多亏了stackoverflow,我才能够找到时间表() 不幸的是,这并没有很好的记录。我有一个我试图运行的作业列表,每个作业在一天中都有一个特定的时间应该运行 for i in jobArray: # compareTimes returns a boolean that indicates if it's time to run it, assume it works. if compareTimes(i.time): # I want

我正试图安排一些工作,多亏了stackoverflow,我才能够找到时间表()

不幸的是,这并没有很好的记录。我有一个我试图运行的作业列表,每个作业在一天中都有一个特定的时间应该运行

for i in jobArray:
    # compareTimes returns a boolean that indicates if it's time to run it, assume it works.
    if compareTimes(i.time):
        # I want to schedule this job for a specific time, i.time
        schedule.every().day.do(job)
while 1:
    schedule.run_pending()
    time.sleep(60)
这就是我想到的。显然这是错误的(它被困在while循环中)。没有.run_pending()的文档,因此我不知道如何修复它以使其正常工作。请帮忙

谢谢

这就是我想到的。显然这是错误的(它被卡住了) while循环)。没有.run_pending()的文档,因此我 我不知道如何修复它才能让它工作。请帮忙

这似乎是正确的行为。调度程序每60秒检查一次挂起的作业,并且(我假设)在它们进入时运行它们。它应该永远运行,因为您正在使用
schedule.every().day.do(job)
永久地调度作业。你的问题是你需要在后台运行这个程序


如果您对适合于生产环境的产品感兴趣,我建议您查看一下(我认为这是过分的)或。这些都有很好的文档记录、分布,并且可以在后台开箱即用地运行。

我认为您的解决方案可以正常工作:主线程被循环阻塞。您在
schedule.every().day.do(job)
注册的工作将每天调用。提醒作业是按顺序执行的! 我想是按照你登记的顺序

有关不阻塞主线程的解决方案,请参见此(连续运行方法)

有关一些示例,请参见此行中的。

schedule.every().day.do(job)
您没有指定当天运行脚本所需的时间,正确的语法为:

schedule.every().day.at("00.00").do(job)
现在加入

.at('xx:xx')
脚本可以正常工作

注意:例如,如果您指定的时间是:
'4:13'
,则它将返回一个错误,正确的格式是
'04:13'
表示它必须是
'xx:xx'


我尝试了代码,它工作正常,希望这能解决您的问题。

我在if分支中放入了print语句。一旦while循环开始,它就永远不会运行。@ZtoYi compareTimes和i.time做什么?什么是我的时间?检查那些。比较时间有效。我已经彻底检查过了。如果我在该程序应该运行的时间运行该程序,则将输入If循环。@ZtoYi“应该运行的时间”是什么意思?调度队列的目的是为您处理“应该运行的时间”。@ZtoYi我在If分支内放了一条打印语句,是,这将只执行一次-在安排作业时。然后,根据您的示例,只有
作业
功能将每天运行一次。将print语句放入
job
中,您将看到它按预定的时间间隔运行。作业是串行执行的,这意味着什么?假设我有一个作业计划在3:00运行,另一个作业计划在2:00运行(分别)。2:00作业将始终在3:00作业之前运行,即使它是在3:00作业之后订购的,对吗?是的,你是对的。Serially表示下一个作业将在前一个作业完成其工作后执行。所以下午2点的工作先开始。只有在下午2点的作业完成后,下午3点的作业才会开始!如果下午2点未完成,则下午3点的作业将延迟。