APScheduler未启动?

16 投票
6 回答
17215 浏览
提问于 2025-04-16 16:40

我想在晚上运行一个Python脚本,所以我考虑使用APScheduler。我的计划是从第二天晚上1点开始运行这个脚本,然后每天晚上都运行一次。

我的调度脚本看起来是这样的(scheduler.py):

from apscheduler.scheduler import Scheduler
from datetime import datetime, timedelta, time, date

def myScript():
    print "ok"

if __name__ == '__main__':
    sched = Scheduler()
    startDate = datetime.combine(date.today() + timedelta(days=1),time(1))
    sched.start()
    sched.add_interval_job(myScript, start_date = startDate, days=1)

在命令行中,我输入:

python myScheduler.py & disown(因为我是在远程运行,所以我想把它放在后台运行,并且不再关联到当前的终端。这样做后,下面会出现一个数字(PID),这就像其他Python脚本运行时的情况一样。但是,当我输入 ps -e | grep python 时,那个数字却不在列表里。我试着用 kill -9 PID 来结束它,但收到的消息是这个任务不存在。

那么,这个调度器到底在运行吗?如果在运行,我该怎么停止它?如果没有,我到底哪里做错了?

6 个回答

4

我安装了apscheduler v3,接下来我会这样做。

from apscheduler.schedulers.background import BackgroundScheduler  
def mainjob():
    print("It works!")

if __name__ == '__main__':
    sched = BackgroundScheduler()
    sched.start()
    sched.add_job(mainjob, 'interval', seconds=120)
    input("Press enter to exit.")
    sched.shutdown() 
9

正确的解决办法是告诉调度程序不要以守护进程的方式运行:

sched = Scheduler()
sched.daemonic = False

或者

sched = Scheduler()
sched.configure({'apscheduler.daemonic': False})
19

你需要让这个脚本一直运行,否则在执行完 sched.add_interval_job(myScript, start_date = startDate, days=1) 之后,脚本就会结束并停止。

import time

while True:
    time.sleep(10)
sched.shutdown()

这样的话,调度器就会继续保持运行。

撰写回答