python - multiprocessing.manager 问题 sys.args

标签 python windows windows-services multiprocessing python-multiprocessing

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

multiprocessing.Manager()

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

问题的堆栈跟踪(在 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

最佳答案

由于设置 sys.argv = [] 无效,如果有脚本名称,您可以使用 do sys.argv = ['scriptname'] 或只是 sys.argv = ['']。如果你运行 python,导入 sys 然后查看 sys.argv,则后者是你得到的,例如,

~$ python
>>> import sys
>>> sys.argv
['']

关于python - multiprocessing.manager 问题 sys.args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219864/

相关文章:

multithreading - 我怎样才能完成ThreadPool.Join?

python - R 和 Python 中 `medcouple()` 实现的区别

windows - Powershell 删除配置文件脚本 - 错误检查不起作用

c - 如何仅使用 C 列出和操作 Windows 文件?

c# - 是否可以使用 .Net 注册 PreShutdown 服务事件?

c# - 静默更新 Windows 服务

python - 从列表中删除一个元素(从列表列表中删除行)

python - 在句点之间提取字符串,除非 CO

python - 将 .overrideColor 值分配给 Maya 中的按钮

windows - 尝试使用 DeviceID 字段从 WMI 查询中唯一标识 USB 设备