Embedded Python: Multiprocessing Not Working
Solution 1:
By default, sys.argv
is not available in embedded code:
Embedding Python
The basic initialization function is Py_Initialize(). This initializes the table of loaded modules, and creates the fundamental modules builtins, __main__, and sys. It also initializes the module search path (sys.path).
Py_Initialize() does not set the “script argument list” (sys.argv). If this variable is needed by Python code that will be executed later, it must be set explicitly with a call to PySys_SetArgvEx(argc, argv, updatepath) after the call to Py_Initialize()
On Windows, multiprocessing
must spawn new processes from scratch. It uses a command line switch --multiprocessing-fork
to distinguish child processes, and also transmits the original argv
from parent to child.
Assigning sys.argv = ['c:/pathToScript/scipt.py']
before creating subprocesses, like you discovered,
would seem to be a good workaround.
A second relevant piece of documentation is that of multiprocessing.set_executable()
:
Sets the path of the Python interpreter to use when starting a child process. (By default
sys.executable
is used). Embedders will probably need to do some thing like
set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
before they can create child processes. (Windows only)
Post a Comment for "Embedded Python: Multiprocessing Not Working"