Я пытаюсь автоматизировать обработку больших файлов данных с помощью python.
Цикл обработки цепочки, т. Е. Script1 записывает файл, который затем обрабатывается script2, затем вывод script2 с помощью script3 и т. Д.
Я использую модуль подпроцесса в поточном контексте.
У меня есть один класс, который создает кортежи из связанных скриптов
( "Scr1.sh", "scr2.sh", "scr3.sh").
Тогда другой класс, который использует вызов как
for script in scriplist:
subprocess.call(script)
Мой вопрос заключается в том, что в этом цикле for каждый сценарий вызывается только после того, как subprocess.call (script1) возвращает успешный код повторного запуска ?.
Или все три вызываются сразу после одного, так как я использую subprocess.call. Без использования «sleep» или «wait», я хочу убедиться, что второй скрипт запускается только после того, как первый закончится .
править: Пидок говорит
"subprocess.call (* popenargs, ** kwargs)
Запустите команду с аргументами. Дождитесь завершения команды и верните атрибут кода возврата. "
Таким образом, в цикле for (см. Выше) он ожидает каждого реткода перед тем, как перейти к следующему сценарию.
Я новичок в потоках. Я прилагаю урезанный код для класса, который выполняет анализ здесь. Цикл subprocess.call является частью этого класса.
class ThreadedDataProcessor(Thread):
def __init__(self, in_queue, out_queue):
# Uses Queue
Thread.__init__(self)
self.in_queue = in_queue
self.out_queue = out_queue
def run(self):
while True:
path = self.in_queue.get()
if path is None:
break
myprocessor = ProcessorScriptCreator(path)
scrfiles = myprocessor.create_and_return_shell_scripts()
for index,file in enumerate(scrfiles):
subprocess.call([file])
print "CALLED%s%s" % (index,file) *5
#report(myfile.describe())
#report("Done %s" % path)
self.out_queue.put(path)
in_queue = Queue()