【问题标题】:Staggering tasks using Crontab使用 Crontab 交错任务
【发布时间】:2015-02-27 21:41:57
【问题描述】:

我将有 64 个任务都相似。它们都需要每 5 分钟运行一次。但是,我不希望它们同时运行。现在我有 64 个:

*/5 * * * *     root    python script1.py

有没有一种方便的方法可以让每 4 秒运行一次?或者我应该使用一个大的 .sh 脚本来做到这一点?

【问题讨论】:

  • 1 分钟间隔是 cron 作业的限制。任何比这更频繁的东西都应该有另一个包装器——也许是另一个脚本,正如你所提到的。

标签: python ubuntu cron crontab ubuntu-14.04


【解决方案1】:

您可以做到这一点的一种方法(至少在 python 中)如下:

import time
import subprocess

tasks = ["task1.py", "task2.py", ..., "task64.py"]
for t in tasks:
    subprocess.call(["python", task], shell=True)
    time.sleep(4)

但是,这假设每个任务在不到一秒的时间内完成,但情况可能并非如此(取决于每个任务的复杂性)。那么,你可能想在这个问题上抛出多处理,以使每个任务在最后一个任务后 4 秒开始,但运行时间只要需要:

import multiprocessing as mp
import time
import subprocess

def caller(task, wait):
    time.sleep(wait)
    subprocess.call(['python', task], shell=True)

tasks = ["task1.py", "task2.py", ..., "task64.py"]
for t,task in enumerate(tasks):
    p = mp.Process(target=caller, args=(task,t*4))
    p.join()

这样,每个任务在最后一个任务之后大约 4 秒开始。然而,并不是说你拥有的任务越多,这个近似值就会越偏离精确的 4 秒间隔(尤其是在后面的任务中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 2011-11-13
    • 1970-01-01
    • 2011-06-22
    • 2014-09-28
    • 2019-05-31
    • 2012-01-27
    • 2017-06-13
    相关资源
    最近更新 更多