繁体   English   中英

无限循环并行运行多个脚本

[英]Running multiple script in parallel in an endless loop

我有20个python脚本,我想在不同的bash窗口中并行运行它们,我可以使用以下命令在后端并行运行它们:

python testv.py &
python testv1.py &
python testv2.py &
python testv3.py &
python testv4.py &
python testv5.py &
python testv6.py &
python testv7.py &
python testv8.py &
python testv9.py &
python testv10.py &
python testv11.py &
python testv12.py &
python testv13.py &
python testv14.py &
python testv15.py &
python testv16.py &
python testv17.py &
python testv18.py &
python testv19.py &
python testv20.py &

我在bash脚本中转换了上面的内容: -vaa.sh

#!/bin/bash
python testv.py &
python testv1.py &
python testv2.py &
python testv3.py &
python testv4.py &
python testv5.py &
python testv6.py &
python testv7.py &
python testv8.py &
python testv9.py &
python testv10.py &
python testv11.py &
python testv12.py &
python testv15.py &
python testv16.py &
python testv17.py &
python testv18.py &
python testv19.py &
python testv20.py &

我想将其运行2 3小时,或者说一直到干预为止。 我怎样才能做到这一点。

我尝试将vaa.sh添加到cronjob中15分钟,但我想以某种方式执行该操作,以便脚本完成后,无论总时间是15分钟还是20分钟,都应该重新开始。

while true; do
   vaa.sh &;
   #wait till the background process is done it will loop again.
   wait;
done;

您可以使用多重处理

import os
import time
from multiprocessing import Process

def run_program(cmd):
    # Function that processes will run
    os.system(cmd)

# Creating command to run
commands = ['python testv.py']
commands.extend(['python testv{}.py'.format(i) for i in range(1, 21)])

# Amount of times your programs will run
runs = 1

for run in range(runs):
    # Initiating Processes with desired arguments
    running_programs = []
    for command in commands:
        running_programs.append(Process(target=run_program, args=(command,)))
        running_programs[-1].daemon = True

    # Start our processes simultaneously
    for program in running_programs:
        program.start()

    # Wait untill all programs are done
    while any(program.is_alive() for program in running_programs):
        time.sleep(1)

如果您希望在一段期望的时间后停止执行程序,可以这样做。

desired_time = 2 * 60 * 60 # 2 Hours into seconds
start_time = time.time()

while True:
    # Initiating Processes with desired arguments
    running_programs = []
    for command in commands:
        running_programs.append(Process(target=run_program, args=(command,)))
        running_programs[-1].daemon = True

    # Start our processes simultaneously
    for program in running_programs:
        program.start()

    # Wait untill all programs are done or time has passed
    while any(program.is_alive() for program in running_programs) and time.time() - start_time < desired_time:
        time.sleep(1)

    # If desired time has passed exit main loop
    if time.time() - start_time > desired_time:
        break

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM