Я создаю несколько сценариев, чтобы помочь импортировать мою базу данных при использовании докеров. В настоящее время у меня есть каталог, заполненный данными, и я хочу импортировать его как можно быстрее.Многопоточность цикла for в python
Все проделанные работы полностью однопоточные, поэтому я хотел ускорить процесс, передав сразу несколько заданий каждому потоку на моем сервере.
Это делается с помощью этого кода, который я написал.
#!/usr/bin/python
import sys
import subprocess
cities = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
for x in cities:
dockerscript = "docker exec -it worker_1 perl import.pl ./public/%s %s mariadb" % (x,x)
p = subprocess.Popen(dockerscript, shell=True, stderr=subprocess.PIPE)
Это работает отлично, если у меня более 10 ядер, каждый из которых имеет свои собственные. То, что я хочу сделать, это настроить его, поэтому, если у меня есть 4 ядра, первые 4 итерации док-скриптов выполняются, от 1 до 4 и от 5 до 10 ждут.
Как только какой-либо из 1 до 4 завершается, начинается 5 и так далее, пока все не будет завершено.
Я просто иметь трудное время выяснить, как сделать это Python
Благодаря
Так между Джоном отвечает, что такое карта, а chunksize = 1 делает это, просто используя mutiprocessing.Pool() не выполняет? –
Вы можете использовать 'multiprocessing.Pool' одинаково хорошо, за исключением того, что у него больше накладных расходов. Для linux, его 'fork' и для windows - это exec нового процесса python плюс травление контекста, необходимого для запуска. Затем ввод/вывод должен быть подключен между процессами. – tdelaney