マルチプロセスされた小さなWindowsサービスアプリケーション内で次のPythonコード行を実行しています。
multiprocessing.Manager()
問題は、Windowsサービスの実行時にモジュールsysセット内に属性argvがないように見えることです。この結果、Pythonマルチプロセッシングフォークライブラリ内で次のエラーが発生します。私は誰かがこの問題に光を当てることができるかもしれないことを望んでいました。
問題のスタックトレース(Windowsサービス内でmultiprocessing.Managerを実行している場合):
File "C:\python27\lib\multiprocessing\__init__.py", line 99, in Manager
m.start()
File "C:\python27\lib\multiprocessing\managers.py", line 524, in start
self._process.start()
File "C:\python27\lib\multiprocessing\process.py", line 130, in start
self._popen = Popen(self)
File "C:\python27\lib\multiprocessing\forking.py", line 252, in __init__
cmd = get_command_line() + [rhandle]
File "C:\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
アップデート
sys.argv
私の問題に対する1つの可能な解決策は、実行時に設定されていない場合は手動で値を設定することですが、これは非常に非Python的です。しかし、それが唯一の解決策かもしれません。stackoverflow-ersはどう思いますか?
if not hastattr(sys, 'argv'):
sys.argv = []
しかし、これにより、multiprocessing.managerの新しい問題が発生し、コード内で予期しないEOFErrorが発生します。
File "C:\python27\lib\multiprocessing\__init__.py", line 99, in Manager
m.start()
File "C:\python27\lib\multiprocessing\managers.py", line 528, in start
self._address = reader.recv()
EOFError