Python 3窗口上的多处理:模块'__main__'没有属性'__spec __'

时间:2017-07-09 12:55:41

标签: python windows python-3.x multiprocessing python-multiprocessing

我已经写了一个基于烧瓶的UI服务器,它按照自己的流程运行,这在Linux和Mac上运行正常,但是当试图在Windows上运行它就吓坏了,似乎因为Windows只有spawn方法而我的代码没有'真的支持这一点。它失败并出现以下异常:

File "C:\Python36-32\Scripts\bibliopixel", line 4, in <module> __import__('pkg_resources').run_script('BiblioPixel==3.0.6', 'bibliopixel') File "C:\Python36-32\lib\site-packages\pkg_resources\__init__.py", line 743, in run_script self.require(requires)[0].run_script(script_name, ns) File "C:\Python36-32\lib\site-packages\pkg_resources\__init__.py", line 1498, in run_script exec(code, namespace, namespace) File "c:\python36-32\lib\site-packages\bibliopixel-3.0.6-py3.6.egg\EGG-INFO\scripts\bibliopixel", line 15, in <module> main.main() File "C:\Python36-32\lib\site-packages\bibliopixel-3.0.6-py3.6.egg\bibliopixel\main\main.py", line 46, in main result = run(args, presets) or 0 File "C:\Python36-32\lib\site-packages\bibliopixel-3.0.6-py3.6.egg\bibliopixel\main\run.py", line 36, in run task.start() File "C:\Python36-32\lib\site-packages\bibliopixel-3.0.6-py3.6.egg\bibliopixel\remote\control.py", line 126, in start self.server.start() File "C:\Python36-32\lib\multiprocessing\process.py", line 105, in start self._popen = self._Popen(self) File "C:\Python36-32\lib\multiprocessing\context.py", line 223, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "C:\Python36-32\lib\multiprocessing\context.py", line 322, in _Popen return Popen(process_obj) File "C:\Python36-32\lib\multiprocessing\popen_spawn_win32.py", line 33, in __init__ prep_data = spawn.get_preparation_data(process_obj._name) File "C:\Python36-32\lib\multiprocessing\spawn.py", line 172, in get_preparation_data main_mod_name = getattr(main_module.__spec__, "name", None) AttributeError: module '__main__' has no attribute '__spec__'

我对MP的理解是它更喜欢能够运行整个模块但是如果你从另一个模块导入一个函数它应该工作正常......因为所有这些都埋藏在整个包中我真的找不到通过具有适当if __name__ == "__main__"部分的模块启动任何此类功能的好方法。

这个过程在这里产生:

https://github.com/ManiacalLabs/BiblioPixel/blob/4cb8cda5e65aba8a512bd679915812e027d76710/bibliopixel/remote/control.py#L44

这里调用了函数:

https://github.com/ManiacalLabs/BiblioPixel/blob/4cb8cda5e65aba8a512bd679915812e027d76710/bibliopixel/remote/server.py#L77

我是MP的新手所以我可能只是错过了一些愚蠢的东西,但我不知道是什么:P

0 个答案:

没有答案