Конверт:
Ubuntu - 18.04
Python - 3.6.6
cx_Freeze - 6.1
Код:
Простой main_script. Файл py (пример в репозитории - https://github.com/Yuriy-Leonov/cython_multiprocessing_issue)
import multiprocessing
if __name__ == '__main__':
print("step-1")
multiprocessing.set_start_method("spawn")
print("step-2")
multiprocessing.freeze_support()
print("step-3")
manager = multiprocessing.Manager()
print("step-4")
s_dict = manager.dict()
print("finish")
И setup.py (для cx_Freeze):
import cx_Freeze
executables = [cx_Freeze.Executable("main_script.py")]
cx_Freeze.setup(
name="Example",
options={
"build_exe": {
"replace_paths": [("*", "")]
},
},
executables=executables
)
Проблема:
После создания исполняемого файла с помощью команды python setup.py build
Я запустил его и в журнале консоли содержалось следующее:
step-1
step-2
step-3
step-1
step-2
step-3
step-1
step-2
step-3
...
И порождались бесконечные процессы.
Я понимаю, что multiprocessing.Manager()
должен породить "серверный" процесс. Но не могу понять текущее поведение и то, как заставить его создать «общий диктат»
Важно:
multiprocessing.set_start_method("spawn")
не может быть изменено и требуется из-за поведения основной программы.
Вопрос:
Как добиться создания manager.dict()
в текущей конфигурации?
PS:
Нет проблем при запуске с обычным python <filename>
(очевидно)