我已经写了一个基于烧瓶的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__"
部分的模块启动任何此类功能的好方法。
这个过程在这里产生:
这里调用了函数:
我是MP的新手所以我可能只是错过了一些愚蠢的东西,但我不知道是什么:P