前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python写Rest Action -- ar-python插件介绍

用Python写Rest Action -- ar-python插件介绍

作者头像
用户2936994
发布2022-07-21 13:54:00
4400
发布2022-07-21 13:54:00
举报
文章被收录于专栏:祝威廉祝威廉

背景

我们知道web-platform 可以主要是以Java/Scala开发的。我们很希望能够支持用Python开发,所以,我们开发了ar-python插件。这个插件很早就开发了,这次完善之后,让他可以和user-system 插件配合,从而可以做精细化权限控制。

为什么要支持Python写接口

其实web-platform是我大AI中台设计的一部分。所以这个插件的开发缘由自然有支持AI的成分在里面。大部分算法工程师熟悉的是C/C++ 和Python,模型训练完成后,最后大概率是要提供web服务的。所以我们希望模型预测部分能够直接用Python开发,然后嵌入到已有的"web服务里"。ar-python完成了这个工作,允许算法用python写一个action,然后直接注册到web服务里,然后就可以提供对外提供服务或者测试了。

上面是第一个场景。第二个场景是,对于一些简单的业务逻辑,没必要那么正儿八经的去开发一套新的插件,用python写个简单的脚本是最高效率的。

使用流程

ar-python 插件支持两种模式,第一种模式是快速体验模式,这个时候不依赖于数据,第二种是生产环境模式,是需要数据库支持的。我们先来看看快速体验模式。

安装命令行:

代码语言:javascript
复制
pip install watchdog requests click uuid sfcli  

新建一个容器目录:

代码语言:javascript
复制
sfcli create --name python_container

修改config/application.yml 确保数据库被禁用,启动容器:

代码语言:javascript
复制
sfcli runtime

然后安装插件:

代码语言:javascript
复制
sfcli plugin --add ar_python:1.0.0 --token xxxxxxx

token 到config/application.yml 里去找admin_token.

现在我们可以注册一段python代码到系统里(我用python代码写的)

代码语言:javascript
复制
import requests

request_url = "http://127.0.0.1:9007/run"

def registerPyAction(enableAdmin, params={}):
    datas = {"code": """from pyjava.api.mlsql import PythonContext
for row in context.fetch_once():
    print(row)    
context.build_result([{"content": "{}"}], 1)
    """, "action": "registerPyAction", "codeName": "echo"}
    if enableAdmin:
        datas = {**datas, **{"admin_token": "xxxxxx"}}
    r = requests.post(request_url, data={**datas, **params})
    print(r.text)
    print(r.status_code)

registerPyAction(True)

里面的admin_token就是config/application.yml 的admin_token. 我们注册了一个echo的python代码。

现在我们可以调用这个python代码了:

代码语言:javascript
复制
# echo
def pyAction(codeName, enableAdmin=True, params={}):
    datas = {"codeName": codeName, "action": "pyAction"}
    if enableAdmin:
        datas = {**datas, **{"admin_token": "xxxxxxx"}}
    r = requests.post(request_url, data={**datas, **params})
    print(r.text)
    print(r.status_code)

pyAction("echo")

我在我自己的Macbook Pro上测试,上面的代码执行时间在20ms以内。理论上能满足一般的预测需求了。

生产模式

生产模式下,会有复杂的权限管理以及数据库依赖。ar_python插件自身只需要一张表:

代码语言:javascript
复制
case class PythonScript(id: Int, var name: String, var code: String)

但是它依赖于user-system插件,可以通过如下方式安装:

代码语言:javascript
复制
sfcli plugin --add app_runtime_with_db:1.0.0 --token xxxx
sfcli plugin --add user-system:1.0.0 --token xxxxxx

值得注意的是,我们需要将user-system/app_runtime_with_db/ar_python 需要的库表准备好,然后通过如下方式注册到系统上:

代码语言:javascript
复制
sfcli add_db --plugin_name user-system \
--host 127.0.0.1 \
--db_name app_runtime_plugin_full \
--user xxxx \
--password xxx  \
--token xxxxx

sfcli add_db --plugin_name ar_python \
--host 127.0.0.1 \
--db_name app_runtime_plugin_full \
--user xxxx \
--password xxx  \
--token xxxxx

用户可以直接带上admin_token操作所有接口。但是也可以做更精细化的权限控制。在ar_python中,有三总类型权限:

  1. 管理权限
  2. 注册python代码权限
  3. 运行某个python脚本权限

管理权限需要有admin_token的用户进行赋权。之后拥有权限管理的人便可以赋予特定用户执行注册和执行代码的权限了。这个后续会单独出文章介绍,我也会尽快开发一个python库,方便在暂时还没有web界面的情况下进行操作。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档