使用Crontab交错任务

时间:2014-12-31 23:27:15

标签: python ubuntu cron crontab ubuntu-14.04

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

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

有没有一种方便的方法让每4秒运行一次?或者我应该使用一个大的.sh脚本吗?

1 个答案:

答案 0 :(得分: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秒间隔(特别是在后面的任务中)