Многопроцессорная обработка в Python

Введение

Примеры

  • 1

    Запуск двух простых процессов

    Простым примером использования нескольких процессов могут быть два процесса (рабочие), которые выполняются отдельно. В следующем примере запускаются два процесса:

    • countUp() подсчитывает 1 вверх, каждую секунду.
    • countDown() подсчитывает 1 вниз, каждую секунду.
     import multiprocessing
    import time
    from random import randint
    
    def countUp():
        i = 0
        while i <= 3:
            print('Up:\t{}'.format(i))
            time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
            i += 1
    
    def countDown():
        i = 3
        while i >= 0:
            print('Down:\t{}'.format(i))
            time.sleep(randint(1, 3)) # sleep 1, 2 or 3 seconds
            i -= 1
    
    if __name__ == '__main__':
        # Initiate the workers.
        workerUp = multiprocessing.Process(target=countUp)
        workerDown = multiprocessing.Process(target=countDown)
    
        # Start the workers.
        workerUp.start()
        workerDown.start()
    
        # Join the workers. This will block in the main (parent) process
        # until the workers are complete.
        workerUp.join()
        workerDown.join()
    
     

    Вывод следующий:

     Up:    0
    Down:    3
    Up:    1
    Up:    2
    Down:    2
    Up:    3
    Down:    1
    Down:    0 
  • 0

    Использование пула и карты

     from multiprocessing import Pool
    
    def cube(x):
        return x ** 3
    
    if __name__ == "__main__":
        pool = Pool(5)
        result = pool.map(cube, [0, 1, 2, 3])
    
     

    Pool представляет собой класс , который управляет несколько Workers (процессы) за кулисами и позволяет Вам, программист, использование.

    Pool(5) создает новый пул с 5 процессами, и pool.map работает точно так же , как карта , но она использует несколько процессов (количество определяется при создании пула).

    Аналогичные результаты могут быть достигнуты с помощью map_async , apply и apply_async , которые можно найти в документации .

Синтаксис

Параметры

Примечания