Поиск…


Выполнение двух простых процессов

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

  • 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

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

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 которые можно найти в документации .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow