skywind3000 / PyStand

:rocket: Python Standalone Deploy Environment !!
MIT License
766 stars 86 forks source link

不支持python原生multiprocessing #82

Closed yuanjunchn closed 3 months ago

yuanjunchn commented 3 months ago

不知道是嵌入式python包的问题还是PyStand的问题,调试好的有multiprocessing的程序,放入PyStand中就会发生程序多开,程序也无法正确运行。

myd7349 commented 3 months ago

看看这个帖子里提到的方法能不能帮到你:

https://github.com/skywind3000/PyStand/issues/21

yuanjunchn commented 3 months ago

感谢帮助,我用您给的参考使用如下代码

      mp.freeze_support()

可以解决问题。 但加入如下判断则会报错

      if not hasattr(sys, 'frozen'):
          sys.frozen = True

报错为:

unknown option --multiprocessing-fork
usage: D:\miniconda3\envs\mpu\python.exe [option] u..nknown option . [---c cmmud | -m mltipod rocessing-fork
| file | -] [usage: D:\mainrg]iconda3\envs\mp ...
u\python.exe [optTry `python -h' for more infoion] ... [-c cmd | rmation-m mod | file |.
 -] [arg] ...
Try `python -h' for more information.

此处报错,使用的python版本为 3.10.14, QT为PySide6。

综上,通过上面的代码可以解决该问题。同时我又试了stackoverflow上的一个帖子 https://stackoverflow.com/questions/15636266/embedded-python-multiprocessing-not-working 在使用multiprocessing.process之前添加如下语句

sys._base_executable = os.path.join(sys.exec_prefix, 'pythonw.exe')

也可以使程序正常运行。可以提供给大家做个辅助参考。 再次感谢~