首页 > 解决方案 > 如何在 python schedule 模块中完成之前清除挂起的作业?

问题描述

实际上,我尝试了这个解决方案,Schedule python clear jobs queue。它按我的预期工作。

但是,我正在制作一个简单的育儿程序,它从 sqlite 数据库文件中获取时间。 这是我的数据库.

到时候,程序会显示一个通知。5 分钟后,将显示另一个通知。第二次通知后 30 秒,程序将执行注销命令。

我的代码:

def job():   
   toaster.show_toast(Title, MsgOne, icon_path=Icon) # 1st notification
   time.sleep(300) # Sleep for 5 mins
   toaster.show_toast(Title, MsgTwo, icon_path=Icon) # 2nd notification
   time.sleep(30) # Sleep for 30 sec
   os.system("shutdown -l") # logout 

schedule.every().day.at(TimeFajr).do(job) # Fajr
schedule.every().day.at(TimeDhuhr).do(job) # Dhuhr
schedule.every().day.at(TimeAsr).do(job) # Asr 
schedule.every().day.at(TimeMaghrib).do(job) # Maghrib 
schedule.every().day.at(TimeIshaa).do(job) # Isha'a 

while True:
   schedule.run_pending()
   time.sleep(1)

一切正常。即使将其转换为 exe (使用 auto-py-to-exe 模块)。我通过将程序添加到 Windows 启动文件夹使程序在后台运行。

问题是,当我在时间到达之前将我的电脑置于睡眠模式或锁定我的电脑,并在时间过去后重新登录时,即使时间过去了,程序也会运行QUEUED JOB并注销系统。我想要的是,需要清除QUEUED JOB或不执行该任务。我尝试了上面链接上的解决方案,但是将其转换为exe后它不起作用。没有这个,程序可以正常工作。(对不起,我的英语很差!)

仅供参考,我是 python 新手,这是我的第一个项目。如果还有其他方法可以实现我正在做的事情,请指导我。

标签: python-3.xexeschedule

解决方案


更新:

我终于想出了一个办法。我用APScheduler替换了整个调度程序模块

我的代码片段:

from apscheduler.schedulers.blocking import BlockingScheduler



def job():   
    toaster.show_toast(Title, MsgOne, icon_path=Icon) # 1st notification
    time.sleep(180) # Sleep for 3 mins
    toaster.show_toast(Title, MsgTwo, icon_path=Icon) # 2nd notification
    time.sleep(30) # Sleep for 30 sec
    toaster.show_toast(Title, MsgThree, icon_path=Icon) # 3rd notification
    #ctypes.windll.PowrProf.SetSuspendState(0, 1, 0) # This will put the PC on sleep
    os.system("rundll32.exe user32.dll,LockWorkStation") # lock windows

scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=fajr_H, minute=fajr_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=dhuhr_H, minute=dhuhr_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=asr_H, minute=asr_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=maghrib_H, minute=maghrib_M, misfire_grace_time=1)
scheduler.add_job(job, 'cron', day_of_week='mon-sun', hour=ishaa_H, minute=ishaa_M, misfire_grace_time=1)

scheduler.start()

这个按我的意愿工作。


推荐阅读