Рубрики
Без рубрики

Основы многопроцессорности

Автор оригинала: Doug Hellmann.

Самый простой способ создать второй процесс – создать экземпляр объекта Process с целевой функцией и вызвать start () , чтобы он начал работать.

multiprocessing_simple.py

import multiprocessing


def worker():
    """worker function"""
    print('Worker')


if __name__  '__main__':
    jobs  []
    for i in range(5):
        p  multiprocessing.Process(targetworker)
        jobs.append(p)
        p.start()

Вывод включает слово «Worker», напечатанное пять раз, хотя оно может не получиться полностью чистым, в зависимости от порядка выполнения, поскольку каждый процесс конкурирует за доступ к потоку вывода.

$ python3 multiprocessing_simple.py

Worker
Worker
Worker
Worker
Worker

Обычно более полезно иметь возможность запускать процесс с аргументами, указывающими ему, что делать. В отличие от threading , для передачи аргументов в multiprocessing Process аргументы должны быть сериализованы с помощью pickle. В этом примере каждому рабочему передается номер для печати.

multiprocessing_simpleargs.py

import multiprocessing


def worker(num):
    """thread worker function"""
    print('Worker:', num)


if __name__  '__main__':
    jobs  []
    for i in range(5):
        p  multiprocessing.Process(targetworker, args(i,))
        jobs.append(p)
        p.start()

Целочисленный аргумент теперь включен в сообщение, выводимое каждым рабочим.

$ python3 multiprocessing_simpleargs.py

Worker: 0
Worker: 1
Worker: 2
Worker: 3
Worker: 4