python-3.x - 如何在 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 新手,这是我的第一个项目。如果还有其他方法可以实现我正在做的事情,请指导我。
解决方案
更新:
我终于想出了一个办法。我用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()
这个按我的意愿工作。
推荐阅读
- reporting-services - 使用 SSRS 中的表达式设置组的边框宽度
- geocoding - 反向地理编码不适用于中国
- java - Spring Boot 启动失败且没有错误
- javascript - 我可以使用 eval 的 jQuery global eval intsead 来逃避内容安全策略吗
- reactjs - 使用打字稿创建反应应用程序 - 如何将类型放在单独的文件中
- ios - 动态设置 navigationItem.prompt 时获取 LayoutConstraints 警告
- javascript - jQuery在解析json中的数组时保留顺序
- android - 选择后单选按钮不填充
- neural-network - 从空间对齐图像的有序序列中分类对象
- c++ - 集合论的一个组合问题