I have this error when I try to use Manager() from python multiprocessing library.
(Just start QGIS open Python console and execute the two following lines)
>>> import multiprocessing
>>> mgr = multiprocessing.Manager()
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\DEV\osgeo4w_dev\apps\Python27\lib\multiprocessing\__init__.py", line 99, in Manager
m.start()
File "C:\DEV\osgeo4w_dev\apps\Python27\lib\multiprocessing\managers.py", line 524, in start
self._process.start()
File "C:\DEV\osgeo4w_dev\apps\Python27\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
File "C:\DEV\osgeo4w_dev\apps\Python27\lib\multiprocessing\forking.py", line 252, in __init__
cmd = get_command_line() + [rhandle]
File "C:\DEV\osgeo4w_dev\apps\Python27\lib\multiprocessing\forking.py", line 339, in get_command_line
if process.current_process()._identity==() and is_forking(sys.argv):
AttributeError: 'module' object has no attribute 'argv'
>>>
It happens in both 1.8 and 1.9 dev version on Windows. Of course everything is ok using QGIS on Linux!… 😛
It seems something related to the main Python/QGis process startup and the way the library tries to start a new process…. but I can't figure out any workaround.
Any idea? (already posted this on qgis dev list but had no response…)
Best Answer
I was wrong in my comment to original post. Suggested workaround does work. In case someone else has that issue here is what needs to be done in QGIS 2.0 before instantiating Manager().
Note that this cannot be tested from python console as Windows lacks fork() and all multiprocessing statements shall be isolated.
If one wants to play around with multiprocessing and embedded python from OSGeo4W bundle outside of QGIS here is the code.
tst.py
tst.c
CMakeLists.txt
vcvarsall.bat
building environmentbuild
(or alike) and cd to itcmake-gui ..
to generate jom/nmake makefiles inbuild
folder provided all files are saved in the parent onetst
orpython ..\tst.py