Что будут делать подпроцессы при использовании многопроцессорности в python - PullRequest
2 голосов
/ 25 марта 2020

Сейчас я изучаю многопроцессорную библиотеку на python, поэтому я планирую несколько экспериментов, чтобы посмотреть, как протекает весь процесс. Я запутался в эксперименте ниже. Первый вопрос заключается в том, почему значение link_id, которое использует каждый подпроцесс, по-прежнему равно 0. Второй вопрос заключается в том, почему line3-line6 выполнялась много раз (в моем случае 9 раз), и оно не равно количеству подпроцессов. Я имею. Python версия: 3.7.4, Операционная система: win10

from multiprocessing import Pool

link_id = 0
print('head is printing link, value {}, id {}'.format(link_id,id(link_id)))
node_id = 0
print('head is printing node, value {}, id {}'.format(node_id,id(node_id)))

def job(i):
    print('job {} is printing link, value {}, var id {}'.format(i,link_id,id(link_id)))    

def mainFunc():

    p = Pool()
    for i in range(20): p.apply_async(job, args=(i,))
    p.close()
    p.join()


if __name__ == '__main__':
    link_id = 10
    print('main is printing link, value {}, id {}'.format(link_id,id(link_id)))
    mainFunc()
    print('main is printing link, value {}, id {}'.format(link_id,id(link_id)))

1 Ответ

1 голос
/ 25 марта 2020

Почему значение link_id используется каждым подпроцессом 0?

Каждый подпроцесс является экземпляром интерпретатора python, каждый из которых будет запускать / компилировать ваш скрипт и иметь отдельную ссылку на модуль. __name__ == '__main__' будет False, хотя, так как это только True при непосредственном запуске файла, link_id будет 0 для каждого из этих подпроцессов

Почему line3- line6 проведено много раз

Ответ на этот вопрос такой же, как и в первом случае, строки будут запускаться number_of_subprocesses + 1 раз (дополнительная 1 - при запуске сценария). Если вы измените число процессов в пуле, вы должны увидеть, сколько раз выполняются строки, изменить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...