multiprocessing.process в python для параллельных процессов, использующих значения из общей очереди - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь использовать многопроцессорный пул python для получения значений из общей очереди и использования в рабочих процессах.

import multiprocessing

def myTask(queue):
   while not queue.empty():     
       value = queue.get()
       print "Process {} Popped {} from the shared Queue".format(multiprocessing.current_process().pid, value)
       queue.task_done()

def main():
   m = multiprocessing.Manager()
   sharedQueue = m.Queue()
   sharedQueue.put(2)
   sharedQueue.put(3)
   sharedQueue.put(4)
   sharedQueue.put(5)
   sharedQueue.put(6)
   pool = multiprocessing.Pool(processes=3)
   pool.apply_async(myTask, args=(sharedQueue,))
   pool.close()
   pool.join()
if __name__ == '__main__':
    main()

Из полученного вывода я вижу, что был запущен только один процесс, которыйвынул все значения из очереди.Как я могу порождать несколько процессов параллельно, которые продолжают получать значения из очереди.У меня есть максимальное ограничение на количество процессов, которое может быть больше, чем размер очереди.Пожалуйста, направьте меня в этом отношении.Спасибо.

PS: Это всего лишь пример.Фактическая задача выполняет миграцию данных из одной формы в другую и выполняет некоторые тяжелые операции с данными.

Обновление: я выполнил следующие модификации, и они, похоже, работают, за исключением того факта, что pool.join () блокирует выход из основного процесса даже при выходе из всех дочерних процессов.

pool = multiprocessing.Pool(processes=4)
while not sharedQueue.empty():
   pool.apply_async(myTask, args=(sharedQueue,))
pool.close()
#pool.join()

def myTask(queue):
   value = queue.get()
   print "Process {} Popped {} from the shared   Queue".format(multiprocessing.current_process().pid, value)
   queue.task_done()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...