3

マルチプロセスされた小さな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
4

2 に答える 2

0

設定sys.argv = []が機能しなかったため、スクリプト名がある場合は、dosys.argv = ['scriptname']または単にを使用できる可能性がありますsys.argv = ['']。後者は、Pythonを実行し、インポートsysしてからsys.argv、たとえば、

~$ python
>>> import sys
>>> sys.argv
['']
于 2013-01-08T17:25:04.890 に答える
0

Pythonの初期化後にこの関数を呼び出します。

PySys_SetArgv(argc, argv);

インタプリタは、main()から明示的に渡すのではなく、他の方法でargc/argvにアクセスすることはできません。

于 2013-04-25T19:33:33.480 に答える