Многопроцессорная обработка / Процесс — Как управлять очередью / менеджером?

#python #multiprocess

#python #многопроцессорность

Вопрос:

В настоящее время я выполняю задание, тогда одновременно будут запущены 3 процесса.

 def someFunctionJob(x,y,**kwargs):
   ..... Code which will do some job

def manager(x,values):
    y = uuid.uuid4().hex
    pr = Process(target=someFunctionJob,args=(x,y,),kwargs=values)
    pr.start()

def main(x,values,settings):

    for i in settings:
        if xyz in ["abc"]:
            manager(x,values)
        elif lender in ["abc1"]:
           manager(lender,product)
        elif lender in ["abc2"]:
            manager(x,values)
 

Что мне нужно, так это то, что он будет управляться очередью:

Например, если workers = 2

Выполнение будет выглядеть так:

 process 1
process 2
waiting till any of the processes will be finished
process 3
 

Ответ №1:

   processes=[]
  for _ in range(2):
      p = Process(target=something )
      p.start()
      processes.append(p)

  for process in processes:
      process.join()
 
 p = Process(target=something )
p.start()
 

Что делает этот код, так это то, что он выполняет 2 процесса выше, затем ожидает их завершения и запускает другой отдельный процесс.

Комментарии:

1. Могу ли я добавить параметры для потоков t = threading.Thread(target=something,args=(x,y,),kwargs=values ) like this ?

2. Да, точно. Если это полезно, примите мой ответ, чтобы помочь и другим.

3. @ElvinJafarov извините за поздний ответ, который отсутствовал и не смог его протестировать, проблема, с которой я столкнулся, заключается в том, что он работает не так, как должен, поскольку он продолжает выполнять два задания

4. @martineau у вас есть какие-либо предложения или источник, который я могу прочитать, чтобы глубже изучить этот процесс?

5. @OksanaOk: Да. Я думаю, что вам нужно либо a multiprocessing.Pool , либо a concurrent.futures.ProcessPoolExecutor .