【问题标题】:Is there any way to run Python model in background?有没有办法在后台运行 Python 模型?
【发布时间】:2020-05-27 04:06:30
【问题描述】:

我有一个使用 Java 作为基本代码的网络应用程序项目。
然后需要使用一种经过训练的 Python 模型来进行一些预测。
我能够加载 Python 的完整脚本并在需要时运行它,但问题是加载时间。

每当调用 Python 脚本时,都需要在进行预测之前重新加载包括模型在内的整个脚本。
比如说,全新运行的整个脚本将占用 30 秒
因此,当我通过网络应用程序进行 4 次预测时,将占用 4 x 30s = 120s。或者如果在 1 次运行中同时进行 4 次预测,最快将是 +- 40 秒
更不用说页面何时重新加载,它需要重新开始
其中等待时间太长无法等待。

所以,我在想有没有什么办法让我在第一次加载模型时只加载一次,然后剩下的就只是调用预测函数了吗?
也许就像在后台缓存 Python 模型然后在下次运行时使用模型(变量)?

【问题讨论】:

  • 您可能应该将 python 进程作为单独的服务运行,也许是一个简单的烧瓶端点,然后它可以只是一个简单的服务器。

标签: java python spring jython python-multithreading


【解决方案1】:

要只初始化一次加载模型,你需要在java中使用单例设计模式。一旦模型类初始化实例,就会创建。您可以在需要时使用此实例。

public class LoadSingletonModel {

    private static LoadSingletonModel instance;

    private LoadSingletonModel(){}

    public static synchronized LoadSingletonModel getInstance(){
        if(instance == null){
            instance = new LoadSingletonModel();
        }
        return instance;
    }

}

这将解决您的问题。

【讨论】:

  • 您不需要为此设置一个单例,而且这根本不能真正解决 OPs 问题。
猜你喜欢
  • 2011-07-22
  • 2019-02-11
  • 2021-10-19
  • 2020-11-08
  • 2018-07-30
  • 2020-11-27
  • 2022-01-02
  • 2017-02-02
相关资源
最近更新 更多