Я пытаюсь использовать многопроцессорный пул 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()