Параллельная обработка скрипта Python
У меня есть скрипт Python, который принимает один вход за раз и обрабатывает его. Я хочу запустить скрипт параллельно с разными входами одновременно. Как 50 или 100 раз, но с разными входными данными из текстового файла.
я выполняю скрипт как:
python script.py -d url1
затем
python script.py -d url2
затем
python script.py -d url3
и вместо того, чтобы вводить один аргумент за раз, я хочу получить эти URL из текстового файла и обрабатывать их параллельно.
Я пробовал этот скрипт, работающий в оболочке bash, используя gnu-параллель, но скрипт bash не запускает оболочку python и, следовательно, ошибки.
код выглядит следующим образом ---
#!/usr/bin/env bash
doit() {
host="$1"
~/script/python script1.py -d $host
}
export -f doit
cat "$1" | parallel -j50 -k doit
содержимое текстового файла ---
url1.com
url2.com
url3.com
--------
url1000.com
url_any.com
2 ответа
С GNU Parallel, вот так:
parallel --dry-run -a arguments.txt python script.py
который предполагает, что ваши аргументы по одному в строке "arguments.txt"
,
использование parallel -k ...
поддерживать выходные данные в порядке, если требуется.
использование parallel --bar ...
чтобы получить индикатор выполнения.
Альтернативой GNU Parallel является использование подпроцесса Python для многократного выполнения команды.
Это пример использования Python 2.7.
Сначала ваш код должен прочитать текстовый файл, чтобы назначить все аргументы списку.
with open('<Arguments text file location>') as f:
arguments = f.read().splitlines()
Затем вы используете цикл для запуска команды один раз для каждого аргумента, используя подпроцесс.
import subprocess
procs = []
for argument in arguments:
cmd = 'python script.py %(argument)' % {'argument': argument}
procs.append(
subprocess.Popen(cmd, shell=True)
)
exit_codes = [p.wait() for p in procs]