Python многопроцессорность НЕ использует доступные ядра - PullRequest
1 голос
/ 18 апреля 2020

Я запускал ниже простую Python программу - делать 4 процесса отдельно. Я ожидаю, что программа завершает выполнение за 4 секунды (как вы можете видеть в коде), но это занимает 10 секунд - то есть она не выполняет параллельную обработку. У меня более одного ядра в моем процессоре, но программа, кажется, использует только одно. Пожалуйста, объясните мне, как я могу достичь параллельной обработки здесь? Спасибо.

import multiprocessing
import time
from datetime import datetime

def foo(i):
    print(datetime.now())
    time.sleep(i)
    print(datetime.now())
    print("=========")

if __name__ == '__main__':
    for i in range(4,0,-1):
        p = multiprocessing.Process(target=foo, args=(i,))
        p.start()
        p.join()
    print("Done main")

1 Ответ

1 голос
/ 18 апреля 2020

Всякий раз, когда вы вызываете join в процессе, ваш блок выполнения и ожидает завершения этого процесса до sh. Таким образом, в вашем коде вы всегда ждете, пока последний процесс завершится sh, прежде чем запускать следующий. Вам нужно сохранить ссылку на процессы и join на них после того, как все они начались, например. как это:

if __name__ == '__main__':
    processes = [multiprocessing.Process(target=foo, args=(i,))
                 for i in range(4,0,-1)]
    for p in processes: 
        p.start()
    for p in processes:
        p.join()
    print("Done main")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...