0

Я пытаюсь создать скрипт python, который вызывает 5 других скриптов python для одновременного запуска при передаче в массиве, а затем каждый из 5 скриптов выполните операцию над этим массивом и верните другой массив в исходный скрипт.Одновременно вызывать скрипт из Python, передавая данные каждому из них и возвращая данные к исходному

Исходный скрипт затем реализует, когда 5 возвращают значения, а затем выполняет операции над этими 5 массивами.

Я думаю, что решение что-то вроде os.system(./script1.py arg1), os.system(./script2.py arg2) , но я не уверен, как поступить.

+0

Вы не должны использовать 'os.system' если вы хотите запустить пять сценариев одновременно. Используйте модуль 'subprocess'. – kindall

ответ

0

Вы можете использовать пул потоков для параллельной работы всех команд. Я также перешел на subprocess модуль, который захватывает программные выходы:

import multiprocessing.pool 
import subprocess as subp 

def worker(script): 
    proc = subp.Popen(script, shell=True, stdout=subp.PIPE, stderr=subp.PIPE) 
    out, err = proc.communicate() 
    return script, out, err, proc.returncode 

scripts = ['./script1.py arg1', './script2.py arg2'] 
pool = multiprocessing.pool.ThreadPool(len(scripts)) 
for script, out, err, returncode in pool.map(worker, scripts): 
    do your magic 
pool.close() 
pool.join() 
+0

это похоже на то, что я потом, но я не понимаю, что для скрипта, вне, .. для вашей магии. Также где возвращаются выходные данные различных сценариев? –

+0

Пул создает один поток для каждого элемента в 'scripts'. 'pool.map' отправляет каждый скрипт и рабочую функцию в потоки и затем выступает в качестве итератора, чтобы передать возвращаемые значения работнику основной программе. Таким образом, цикл for получает результат каждого скрипта по очереди. В зависимости от того, как вы хотите обрабатывать данные, вы можете жонглировать тем, что возвращается и как его собирать. Например, «worker» может просто вернуть «out», и вы можете получить список выходов как 'output = list (pool.map (worker, scripts))'. – tdelaney

+0

ничего себе. большое спасибо. это прекрасно работает. Есть ли способ, который я могу рассматривать вывод каждого из разделов сценариев из того, что они печатают? то есть в pool.map есть возвращаемое значение, а также значение out? –