hileez / node-pyrunner

Nodejs call python native addon.
MIT License
36 stars 2 forks source link

linux和macos不能使用multiprocessing的原因 #11

Closed 2freeman closed 6 months ago

2freeman commented 12 months ago

你好,

README中多进程部分提到:在linux和macos上不能使用multiprocessing模块,想请教下原因,以及是否存在解决这个问题的方法。

多谢。

hileez commented 6 months ago

node-pyrunner是在nodejs的addons插件中嵌入了python解释器,python脚本是在node进程执行而不是python进程。multiprocessing模块创建子进程是使用当前进程的程序执行python脚本,也就是用node程序直接执行python脚本,这显然是不行的。multiprocessing模块在Windows中提供了set_executable()方法能够设置新进程的可执行程序,你可以更改为操作系统中安装的python.exe来在子进程执行python脚本。Linux和Macos操作系统中并没有提供set_executable()方法,因此node-pyrunner在Linux和Macos操作系统中无法使用multiprocessing模块。 实际上这是由操作系统决定的,Windows创建子进程的API能够设置可执行程序,Linux和Macos系统中创建子进程相当于创建当前进程的副本,也就是C语言中的fork()函数,无法设置子进程的执行程序。目前还没有解决的办法,除非能让node像python程序那样能用命令执行python脚本,如果是开发electron应用还要让electron能用命令执行python脚本。