我目前正在处理一个带有地理数据的 ML 项目......
在我的网络中,我让机器学习算法的模型参数给用户,然后我将它们发送到 Apache 服务器,PHP 在那里获取参数......在js中,我使用Ajax发出POST请求。
我的 ML 算法是用 Python 制作的,现在正在使用库argparse
读取 PHP 发送的参数(验证后)作为命令通过函数exec()
我对此有 2 个问题:
-
如果 ML 模型需要时间来计算结果,则
exec
函数不会等待它们并在一段时间后返回null
,但如果速度很快,一切都没问题。我已经在我的 PHP 文件中set_limit_time(0);
了函数。 -
在我的本地机器中,计算结果并不像在服务器上那样花费太多时间,但是服务器有更好的硬件,所以我不知道那里发生了什么。
- 菲律宾比索 7.0.15
- 蟒蛇 2.7
- 服务器 Apache/2.4.18 (Ubuntu 16.04.1 LTS)
另外,有没有更好的方法可以做到这一点?
我想提出另一种方法。
每当您从命令行调用算法时,您都有一个引导时间:导入库(例如 numpy)、加载数据集等。然后执行计算,返回响应并清除内存。因此,下次您需要另一个结果时,您必须再次经历所有过程。
我建议将该算法嵌入到一个小型的 Flask 应用程序中(您已经了解 Python 并且知道如何将 PHP 用于 Web,这应该不会那么难。
由于您的python Web服务器将已经加载了所有库和数据集,因此回答您的问题会快得多。
你可以从PHP访问它,用curl
做HTTP请求(它有超时!
我认为这将更容易和可扩展。
就我的两分钱!
我最终打开了一个 Python 套接字并通过它连接 PHP,现在这个过程仍然比我的本地机器慢,但超时不再是问题。