multiprocessing.manager issue sys.args

时间:2013-01-08 16:43:22

标签: python windows windows-services multiprocessing python-multiprocessing

我在一个多处理的小型Windows服务应用程序中运行以下python代码行。

multiprocessing.Manager()

问题是在运行Windows服务时模块sys set中似乎没有属性argv。因此,我在python多处理分叉库中发生以下错误。我希望有人能够对这个问题有所了解。

Stacktrace问题(在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值,如果它没有在运行时设置,但这看起来非常单调。但可能是唯一的解决方案。 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

2 个答案:

答案 0 :(得分:0)

由于设置sys.argv = []不起作用,如果有脚本名称,您可以使用sys.argv = ['scriptname']sys.argv = ['']。如果你运行python,导入sys然后查看sys.argv,例如,

,后者就是你得到的
~$ python
>>> import sys
>>> sys.argv
['']

答案 1 :(得分:0)

在Python初始化之后调用此函数:

PySys_SetArgv(argc, argv);

解释器无法以其他方式访问argc / argv,而是从main()显式传递它们。