在 Nodejs 中预加载 python 个库

Pre-load python libraries in Nodejs

我有一个带有 JavaScript 前端和 python 后端的网络应用程序。用户写一个短语,点击一个按钮,python 解析句子(自然语言处理)并将数据发送回客户端。我使用 SpaCy 进行自然语言处理。 SpaCy 需要很长时间才能加载,所以我想知道我是否可以在启动服务器时在 NodeJS 中预加载 SpaCy(相对于每次生成 python 文件时导入 SpaCy - 这就是我现在所做的,请参见下面的代码)。 谢谢!

JavaScript代码:

io.on('connection', (socket) => {
    socket.on('run_command_request', async (data) => {
        let output_str = await run_python_command(data);
        socket.emit('run_command_complete');
    });
});


async function run_python_command(data) {
    var spawn = require('child_process').spawn;
    var py = spawn(python_executable, ['./run_command.py']); //PYTHON FILE CALLED EVERY TIME A USER CLICKS A BUTTON
    var python_output_string ='';
    py.stdin.write(JSON.stringify(data));
    py.stdin.end();
    return new Promise((res, rej) => {
        py.stdout.on('end', function() {
            res(python_output_string);
        });
    });
}

Python代码:

import spacy #############   THIS STEP TAKES FOREVER    #############   
nlp = spacy.load("en_core_web_sm") 
doc = nlp(tc)
verb = [token.lemma_ for token in doc if token.pos_ == "VERB"]
print(verb)

您可以将您的 python 程序变成服务器。您的 nodejs 程序可以在启动时启动它一次。然后,您不必每次都生成,只需向它发送一个带有 JSON 数据的请求并等待其响应。

为简单起见,您甚至可以将 python 程序设为一个 http 服务器(在已知的本地非公开路由端口上),并且您可以随时向它发送一个 http 请求 运行 对短语的自然语言解析。

将 python 程序更像是一种 运行ning 服务,可以随时处理请求。这样您只需支付一次启动费用。