Я использую библиотеку многопроцессорности python для выполнения сценария selenium. Мой код ниже:Как использовать пул многопроцессорности python в непрерывном цикле
#-- start and join multiple threads ---
thread_list = []
total_threads=10 #-- no of parallel threads
for i in range(total_threads):
t = Process(target=get_browser_and_start, args=[url,nlp,pixel])
thread_list.append(t)
print "starting thread..."
t.start()
for t in thread_list:
print "joining existing thread..."
t.join()
Как я понял функцию join()
, он будет ждать каждого завершения процесса. Но я хочу, чтобы как только процесс был выпущен, ему будет назначена другая задача для выполнения новой функции.
Это может быть понято как это:
Say 8 процессы начались в первую очередь.
no_of_tasks_to_perform = 100
for i in range(no_of_tasks_to_perform):
processes start(8)
if process no 2 finished executing, start new process
maintain 8 process at any point of time till
"i" is <= no_of_tasks_to_perform
он работал хорошо для меня ... спасибо @Shane –
@shane, Где 8 процессоров в этой установке? Если бы это было просто: 'process.start (8)'. У меня есть собственный исходный код модуля python, который я могу инициализировать классом, чтобы установить экземпляр webDriver, а затем вызвать функцию очистки с параметрами в очереди. Но не нужно ли создавать экземпляры 8 разных веб-дисков в пул, потому что мне интересно, как один буфер буфера X-window (Xvfb) и безголовый хронограв может действовать как 8 различных процессов для выполнения очереди задач (в тысячах) ? – Ricalsin
В этой настройке вы фактически вручную запускаете 8 процессов (или все, что хотите), и делаете каждый из них длительным процессом для непрерывной выборки новой задачи (создайте экземпляр браузера и делайте что-нибудь в своем случае), например. 'process1 = Process (target = worker, args = (queue,))' ... 'process8 ...'. Это другая настройка, если вы хотите использовать 'multiprocessing.Pool', вам нужно передать свою функцию с помощью' map', но на самом деле это не так удобно в вашем случае, особенно когда дело касается нескольких параметров, проверьте это: http: //stackoverflow.com/a/5442981/7405394 – Shane