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如果在运行时未设置该值,则我手动设置该值,但这似乎非常不合pythonic。但可能是唯一的解决方案。stackoverflow 的人是怎么想的?

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']或 just sys.argv = ['']sys如果您运行 python,导入然后查看,则后者是您得到的sys.argv,例如,

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

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

PySys_SetArgv(argc, argv);

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

于 2013-04-25T19:33:33.480 回答