我有一个正在nodejs中运行的工作。这项工作大约需要40-50秒。
我必须在Laravel框架中运行php中的工作。
$_commands = [
'echo "end deploy"',
'echo "Starting script_j release=dev"',
'node script_j release=dev',
'echo "Finished script_j release=dev"'
];
foreach( $_commands AS $command )
{
$tmp = \exec($command);
}
exit();
我可以通过将exec命令更改为
来改善php脚本的运行时间\exec("$command > /dev/null 2>/dev/null &");
但是有没有办法指示nodeJs脚本向php exec函数发送一个nodejs脚本完成但后来继续工作的信号。
也就是说你在使用express的节点应用程序中执行相同的方式...发送res.json()
但继续功能...
提供线程的包:https://github.com/audreyt/node-webworker-threads
var worker = new Worker(function(){
postMessage("I'm working before postMessage('ali').");
this.onmessage = function(event) {
postMessage('Hi ' + event.data);
self.close();
};
});
worker.onmessage = function(event) {
setTimeout(function(){
console.log("Worker said : " + event.data);
}, 5000);
};
worker.postMessage('ali');
但是,当您从终端调用此脚本时,您无法再次控制终端,直到父进程和子进程完成为止。
通过在脚本末尾添加process.exit();
来终止父任务,并且调用脚本的终端再次被用户响应,但这也会导致子进程终止console.log
打印任何东西。