nodejs服务器实时调用多个python脚本的解决方案

Solution for calling multiple python scripts in real time from a nodejs server

好吧,这是一个有点复杂的问题,我尽量对其进行足够广泛的解释,以便您能够理解我们需要什么。

该项目是关于一些由 raspi 控制的步进电机,它 运行 是一个 nodejs 服务器,为 webapp 提供服务。 Webapp 通过 websocket 与 nodejs 服务器通信。

您可以在 webapp 中使用摇杆控制方向和速度,每次值更改时,webapp 都会向服务器发送带有 websocket 协议的消息。

当 nodejs 服务器收到这些消息时,它会启动一个子进程,如下所示:

     child_process.exec('python /home/pi/Adafruit-Motor-HAT-Python-Library/examples/StartStepper.py 10 1 10 0', function (err, stdout, stderr) {
        if (err) {
            console.log("child processes failed with error code: " +
                err.code);
        }
        console.log(stdout);
    });

我为步进器设置了脚本,这样我就可以将步数、rpm 和步进样式设置为脚本的参数。

所以这一切都很好,我可以用我的事件等启动脚本。

但是如果我移动操纵杆,脚本会被调用多次,这还不错,因为如果我从左切换到右或者如果我改变速度就必须调用它,但是脚本就像在一个堆栈上,当一个新的开始时不要停止,他们只是做他们的工作并且 运行 直到他们完成。我希望它们在再次调用脚本时立即停止,但我对 python 并没有那么深入。也许它甚至可以工作,改变线程的属性,它在 运行 时间内控制步进器?对此我不确定。我只想实时控制我的步进器,这很遗憾 python,因为步进器控制器不支持其他语言。

更新: 所以我现在尝试在执行新进程之前终止进程:

var child_process = require('child_process');

child_process.kill(); //Default killSignal
    child_process.exec('python /home/pi/Adafruit-Motor-HAT-Python-Library/examples/StartStepperL.py 10 1 10 0', function (err, stdout, stderr) {
        if (err) {
            console.log("child processes failed with error code: " +
                err.code);
        }
        console.log(stdout);
    });

这显然行不通,因为我不处理 killSignal,但我不知道在哪里处理它,我已经阅读了相关文档。

为什么不始终保留对子进程的引用,并且在生成新进程之前,如果存在旧进程,则将其杀死。通过这种方式,您可以从 node.js 应用程序处理这一切。

检查子进程终止: https://nodejs.org/api/child_process.html#child_process_child_kill_signal