skywind3000 / PyStand

:rocket: Python Standalone Deploy Environment !!
MIT License
814 stars 90 forks source link

py3.12 原生multiprocessing.Process(target=lambda :print("mp process run")).start()并没实际运行 #90

Closed jasoneri closed 3 months ago

jasoneri commented 3 months ago

python 环境: python-3.12.3-embed-amd64.zip 执行信息为 Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32

PyStand使用: release的PyStand-v1.1.3-exe 里面的 PyStand-x64-CLI

已查过 issue 如#21 #82 ,修改后均无效果

Process在pyqt5的gui内部创建,因为需要传递gui变量给新建的进程,无法在主界面创建前先开

skywind3000 commented 3 months ago

那把这部分工作交给 runtime 里的 python.exe 呢?

jasoneri commented 3 months ago
  CGS
   ├── runtime     # python-3.12.3-embed-amd64.zip 全扔进去了
   ├── scripts       # 项目代码
   ├── site-packages
   ├── PyStand.exe             
   └── _pystand_static.int

runtime/python312._pth 文件内容

python312.zip
.
..
../site-packages
../scripts

# Uncomment to run site.main() automatically
import site

使用的就是runtime环境的python,这目录结构应该没错,主进程pyqt5的gui是没问题的,但逻辑生成的子进程就不行了,空有子进程pid,不执行进程任务例如标题的print(使用的是PyStand cli)

skywind3000 commented 3 months ago

我的意思是,试试用 multiprocessing 里的 set_executable,将该模块调用的可执行设置成 runtime 里的 python.exe :

jasoneri commented 3 months ago

ok,好了。之前看的人发博写的multiprocessing.set_executable用的是 pythonw.exe,隐藏了窗口没打印出报错报文,导致我以为是子进程没执行

感谢解答