Я пытаюсь скомпилировать скрипт, использующий multiprocessing
, в исполняемый файл Windows. Сначала я столкнулся с той же проблемой, что и Почему исполняемый файл Python открывает новый экземпляр окна, когда функция многопроцессорного модуля вызывается в Windows , когда я компилировал его в исполняемый файл. После принятого ответа я настроил свой сценарий так, чтобы
from multiprocessing import freeze_support
# my functions
if __name__ == "__main__":
freeze_support()
# my script
И это снова прекрасно работает, когда запускается как скрипт. Однако, когда я компилирую и запускаю его, я сталкиваюсь с:
Где я подчеркнул зеленой частью ошибки. Эта конкретная строка относится к
freeze_support()
в моем сценарии. Кроме того, на самом деле это не встречается в этой строке, но когда мой сценарий переходит к многопроцессорному, что-то вроде:
p = multiprocessing.Process(target=my_function, args=[my_list])
p.start()
p1 = multiprocessing.Process(target=my_function, args=[my_list])
p1.start()
p.join()
p1.join()
Это ошибка в многопроцессорном модуле (в частности, строка 148) или я неправильно понял ответ, который я связал, или что-то еще?
Я также отмечу, что сценарий работает правильно при компиляции, но вы должны нажать «ОК» в сообщении об ошибке для каждого многопроцессного процесса, который порождается (довольно много), и каждое сообщение об ошибке точно такое же. Означает ли это, что я неправильно завершаю процесс с p.join()
?
Я также пробовал решение на Многопроцессорная обработка Python 3.4 не работает с py2exe , который рекомендует добавить
multiprocessing.set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
к вашему скрипту, но это приводит к ошибке в форме скрипта (даже не скомпилированной):
FileNotFoundError: [WinError 2] Системе не удается найти указанный файл
Спасибо за помощь!
документация freeze_support: https://docs.python.org/2/library/multiprocessing.html#multiprocessing.freeze_support