为什么运行schedule.run_pending()还要延时1秒,而不是0.1秒?

为什么运行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)


回答:

使用time.sleep(1)这种,就是让当前线程等待一段时间再继续执行。

通常情况下会放在循环里面使用,目的就是适当的加大某些操作的间隔。

这种思想很常见:短链接、长轮询你应该听说过吧

  • 短链接的话,就是以一个固定间隔去轮询数据。类似于代码中的schedule.run_pending()
  • 长轮询的话,需要有一个阻塞机制。比如schedule.run_pending()在某些场景下会阻塞当前线程,这样的话就不需要再设置sleep。

至于为什么是1秒、而不是0.1秒,这个要看业务场景确定。

举个例子,订单创建30分钟未支付,需要将其置为失效状态。解决方案使用定时任务一定间隔查询数据库,查到超过30分钟的即置为失效。

那么选择5分钟执行一次、和每1分钟执行一次,有啥区别呢?
显然时间间隔越短,时间判断的越精细;但对数据库的压力也越大。


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

以上是 为什么运行schedule.run_pending()还要延时1秒,而不是0.1秒? 的全部内容, 来源链接: utcz.com/p/938672.html

回到顶部