为什么运行schedule.run_pending()还要延时1秒,而不是0.1秒?
schedule.every().days.at("14:59").do(a)
# 定时运行钉钉业绩推送
# schedule.every().days.at("16:50").do(a)
# 定时运行亚马逊红人
# schedule.every().days.at("16:50").do(a)
# 每周五自动上传文档到微锁系统
# schedule.every().sunday.at("18:00").do(a)
while True:
schedule.run_pending()
time.sleep(1)
回复
1个回答

test
2024-07-15
使用time.sleep(1)
这种,就是让当前线程等待一段时间再继续执行。
通常情况下会放在循环里面使用,目的就是适当的加大某些操作的间隔。
这种思想很常见:短链接、长轮询你应该听说过吧
- 短链接的话,就是以一个固定间隔去轮询数据。类似于代码中的
schedule.run_pending()
。 - 长轮询的话,需要有一个阻塞机制。比如
schedule.run_pending()
在某些场景下会阻塞当前线程,这样的话就不需要再设置sleep。
至于为什么是1秒、而不是0.1秒,这个要看业务场景确定。
举个例子,订单创建30分钟未支付,需要将其置为失效状态。解决方案使用定时任务一定间隔查询数据库,查到超过30分钟的即置为失效。
那么选择5分钟执行一次、和每1分钟执行一次,有啥区别呢?显然时间间隔越短,时间判断的越精细;但对数据库的压力也越大。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容