Скрипт для запуска нескольких экземпляров другого скрипта, который принимает входной параметр - PullRequest
2 голосов
/ 17 января 2020

У меня есть скрипт python (grouper.py), который принимает 1 аргумент в качестве входных данных. В настоящее время из-за размера входного файла я должен разбить входной аргумент на 20 частей, открыть 20 терминалов и запустить все 20 сразу.

Есть ли способ l oop через все 10 входных данных аргументы, которые запускают процесс python?

def fun(i):
    j = pd.read(i)    
    # do some heavy processing
    return j
for i in inputfiles:
    print(i)
    outputfile=fun(i)
    outputfile.to_csv('outputfile.csv', index=False)

Мой код выше делает каждый входной файл 1 за один раз ... Есть ли способ запустить все 20 входных файлов одновременно? ?

Спасибо !!

1 Ответ

1 голос
/ 17 января 2020

Q : Скрипт для запуска нескольких экземпляров другого скрипта, который принимает входной параметр?

GNU parallel решает это прямо из CLI:

parallel python {} ::: file1 file2 file3 ...... file20

Учитывая, что на нем работает более 20 процессоров с процессором с ядром, # do some heavy processing может остаться без ограничений на просто - [CONCURRENT] планирование CPU и может действительно выполнять работу почти [PARALLEL] способом (без условий гонки на общих ресурсах)

for i in inputfiles:
    print(i)
    outputfile=fun(i)
    ...

является чистым [SERIAL] итератором производя только последовательность проходов, поэтому запуск процесса прямо из CLI может быть самым дешевым решением. Python joblib и другие инструменты многопроцессорной обработки могут порождать копии работающего интерпретатора python, но это будет с довольно значительными дополнительными затратами, если это будет только пакетная обработка от цели может быть достаточно для одной команды CLI - для обработки известного списка файлов в другой набор выходных файлов.

...