【问题标题】:Pre-load python libraries in Nodejs在 Nodejs 中预加载 python 库
【发布时间】:2021-07-14 02:10:43
【问题描述】:

我有一个带有 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 node.js machine-learning nlp spacy


    【解决方案1】:

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

    为简单起见,您甚至可以将 python 程序设置为 http 服务器(在已知的、本地的、非公开路由的端口上),并且只要您希望它在短语。

    将 python 程序想象成一个正在运行并可随时处理请求的服务。这样您只需支付一次启动费用。

    【讨论】:

    • 非常感谢!你知道如何在 Python 上编写服务器程序吗?我是编程新手,所以任何链接/教程/等都会非常有帮助。再次感谢!
    • @Felipe - 我自己并不了解 Python 框架,但可以从这里开始:geekflare.com/python-frameworks-for-apis。您可以设计一个接受 JSON 输入作为正文并返回自然语言结果的 POST 请求。
    • 非常感谢!!这有帮助
    猜你喜欢
    • 2012-10-07
    • 2022-05-05
    • 2014-06-18
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多