【问题标题】:Python Cron job on UbuntuUbuntu 上的 Python Cron 作业
【发布时间】:2012-12-27 08:51:34
【问题描述】:

我有一个 python 程序,我想每 10 秒运行一次,就像 cron 作业一样。我不能在循环中使用睡眠,因为时间间隔会变得不确定。我现在的做法是这样的:

interval = 10.0
next = time.time() 

while True: 
    now = time.time() 
    if now < next: 
        time.sleep(next - now) 
        t = Thread(target=control_lights,)
        t.start()# start a thread
    next += interval 

它会生成一个执行 contro_lights 函数的新线程。问题是随着时间的推移,python 进程的数量会增长并占用内存/CPU。有什么好的方法可以做到这一点吗?非常感谢

【问题讨论】:

  • 你为什么不让cron这样做?
  • @Blender:可能是因为cron 运行作业的频率不能超过每分钟一次。

标签: python ubuntu cron


【解决方案1】:

可以尝试在这个脚本中使用 supervisord 或 god 吗?在类 UNIX 操作系统上使用和控制多个进程非常简单

【讨论】:

    【解决方案2】:

    看看一个名为The Fat Controller 的程序,它是一个类似于 CRON 的调度程序,但有更多选项。间隔可以从上一次运行结束(如 for 循环)开始测量,也可以每隔 x 秒定期测量一次,我认为这是你想要的。在这种情况下特别有用的是,如果其中一个进程花费的时间超过 x 秒,您可以告诉胖控制器该怎么做:

    • 无论如何运行一个新实例(将并行进程增加到指定的最大值)
    • 等待上一个完成
    • 杀死前一个并开始一个新的

    文档中应该有大量关于如何设置它的信息。

    【讨论】:

      【解决方案3】:

      您可以每 10 秒运行一次 cron 作业,只需将第二个参数设置为“0/10”。它将在 0、10、20 等上运行

      #run every 10 seconds from mon-fri, between 8-17
      CronTrigger(day_of_week='mon-fri', hour='8-17', second='0/10')
      

      【讨论】:

        猜你喜欢
        • 2010-11-15
        • 2018-04-09
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        相关资源
        最近更新 更多