Параллельный запуск нескольких скриптов в бесконечном цикле - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть 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 минут.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете сделать это, используя многопроцессорную обработку

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
0 голосов
/ 28 ноября 2018
while true; do
   vaa.sh &;
   #wait till the background process is done it will loop again.
   wait;
done;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...