【问题标题】:How bad of an idea is it to use time.sleep() for 12 hours? (Python 3.8) [closed]使用 time.sleep() 12 小时有多糟糕? (Python 3.8)[关闭]
【发布时间】:2021-01-10 01:37:29
【问题描述】:

我想每 12 小时运行一次脚本,或者至少运行一次其中的代码块。我会浪费多少资源/浪费多少资源:

while True:
    My Code
    time.sleep(43200)

有没有更简单、更有效的方法来实现这一点?

【问题讨论】:

  • 是的,使用外部调度程序来运行您的作业。如果你使用 linux,你有 cron 在你的腰带。 Windows 也有一个任务计划程序。
  • 您是否尝试过运行该脚本?发生了什么?你想象它使用什么“资源”?您是否尝试过研究替代品?
  • 只有在进入 sleep 之前对共享资源(例如文件或数据库)进行某种锁定,才会浪费资源。

标签: python python-3.x time


【解决方案1】:

如果您需要在一小时内(或更多)运行一次代码,我建议您使用apscheduler

from apscheduler.schedulers.blocking import BlockingScheduler

def main():
   Do something

scheduler = BlockingScheduler()
scheduler.add_job(main, "interval", hours=12)
scheduler.start()

apscheduler 提供更可控和一致的操作执行时间。例如,如果您想每 12 小时运行一次,但处理需要 11 小时,那么基于睡眠的方法最终将每 23 小时执行一次(运行 11 小时 + 睡眠 12 小时)。

【讨论】:

  • 为什么?如,appscheduler 解决了仅sleep 长期产生的哪些问题?
  • 假设您想每 12 小时运行一次,但处理需要 11 小时。 sleep 的作用是你启动应用程序,它会运行 11 个小时,然后你会再等 12 个小时进入睡眠状态。间隔将是 23 小时而不是 12 小时。
【解决方案2】:

这个时间是不准确的,因为它只计算 cpu 在这个进程上的时间 至少您可以每隔几秒检查一次目标时间是否到达 这不是一个好的解决方案,因为您的进程不如系统 cron 可靠。您的进程可能由于未知错误和系统高 cpu/mem 利用率而挂起

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多