#python #multiprocessing
#python #многопроцессорная обработка
Вопрос:
На платформе Windows эти две строки заставляют выполнение кода Python выполняться в бесконечном цикле с каждым циклом, начинающимся с начала скрипта:
import multiprocessing as mp
manager=mp.Manager()
Он отлично работает на Mac. В чем может быть причина? Он успешно импортирует import multiprocessing as mp
. Но при manager=mp.Manager()
этом прерывается (без ошибок) и возвращается к первой строке кода.
Ответ №1:
В Windows вы должны защищать вызовы multiprocessing
с if __name__ == "__main__":
помощью . Подробнее о том, почему это требуется, смотрите здесь. Это должно работать нормально:
import multiprocessing as mp
if __name__ == "__main__":
manager=mp.Manager()
Редактировать:
Обратите внимание, что размещение вашего multiprocessing
кода внутри функций, которые вы вызываете из if
блока, тоже нормально. Вот так:
import multiprocessing as mp
def func(x):
print("Got %s" % (x,))
def main():
p = multiprocessing.Pool()
results = p.map(func, range(0,5))
if __name__ == "__main__":
manager = mp.Manager()
main()
Комментарии:
1. Итак, я должен переместить импорт в
if name==main
область видимости?2. Спасибо за помощь! Спасибо!
3. @Sputnix Нет проблем. Просто обратите внимание, что все ваши вызовы, которые включают создание нового процесса с помощью
multiprocessing
(например, созданиеPool
orProcess
), должны выполняться внутриif __name__ ...
блока.4. Должен ли я тоже поместить
pool.map_async(functName, ['arg1','arg2','arg3'])
inside ofif __name__=="__main__"
?5. @Sputnix Да, это тоже.