Serverless在编程教育中的实践( 三 )


Serverless在编程教育中的实践文章插图
Python编程语言示例下面以运行Python代码为例来看看如何用FC实现Python在线编程Demo 。
创建服务和函数
打开函数计算(FC)控制台 , 选择对应的Region , 选择左侧服务/函数 , 然后新建服务:
Serverless在编程教育中的实践文章插图
输出服务名称 , 创建服务 。
Serverless在编程教育中的实践文章插图
进入新创建的服务 , 然后创建函数 , 选择HTTP函数 , 即可配置HTTP触发器的函数:
Serverless在编程教育中的实践文章插图
设置函数的各个参数:
Serverless在编程教育中的实践文章插图
几个需要的注意的参数这里做以说明:
运行环境:这个很好理解 , 这里选择Python3函数实例类型:这里有弹性实例和性能实例两种 , 前者最大支持2C3G规格的实例 , 后者支持更大的规格 , 最大到8C16G 。 函数入口:详细参见文档HTTP触发器认证方式:anonymous为不需要鉴权 , function是需要鉴权的 。
代码解析
函数创建好 , 进入函数 , 可以看到概述、代码执行、触发器、日志查询等页签 , 我们先看触发器 , 会看到这个函数自动创建了一个HTTP触发器 , 有调用该函数对应的HTTP路径:
Serverless在编程教育中的实践文章插图
然后我们选择代码执行 , 直接在线写入我们的代码:
Serverless在编程教育中的实践文章插图
具体代码如下:
-- coding: utf-8 --import loggingimport urllib.parseimport timeimport subprocess
def handler(environ, start_response):
context = environ['fc.context']request_uri = environ['fc.request_uri']for k, v in environ.items():if k.startswith('HTTP_'):passtry:request_body_size = int(environ.get('CONTENT_LENGTH', 0))except (ValueError):request_body_size = 0# 获取用户传入的coderequest_body = environ['wsgi.input'].read(request_body_size)codeStr = urllib.parse.unquote(request_body.decode("GBK"))# 因为body里的对象里有code和input两个属性 , 这里分别获取用户code和用户输入codeArr = codeStr.split(' --tt-darkmode-color: #6A737D;">从前端传入代码片段 , 格式是字符串 。

  • 在FC函数中获取到传入的代码字符串 , 截取code内容和input的内容 。 因为这里简单实现了Python中input交互的能力 。
  • 将代码保存为一个Python文件 , 以时间戳为文件名 , 保存在FC函数的/tmp目录下 。 (每个FC函数都有独立的/tmp目录 , 可以存放临时文件)
  • 然后在文件中追加了引入time库的代码 , 应对sleep这种交互场景 。
  • 通过subprocess创建子进程 , 以Shell的方式通过Python命令执行保存在/tmp目录下的Python文件 。 如果有用户输入的信息 , 则通过标准输入输出写入子进程 。
  • 最后读取执行结果返回给前端 。
前端代码前端我使用VUE写了简单的页面 , 这里解析两个简单的方法:
Serverless在编程教育中的实践文章插图
页面加载时初始化HTTP请求对象 , 调用的HTTP路径就是方才函数的HTTP触发器的路径 。
Serverless在编程教育中的实践文章插图
这个方法就是调用FC中的PythonRuntime函数 , 将前端页面的代码片段传给该函数 。 这里处理input交互的思路是 , 扫描整个代码片段 , 以包含input代码为标识将整个代码段分成多段 。 没有包含input代码的直接送给FC函数执行 , 包含input代码的 , 请求用户的输入 , 然后代码片段带着用户输入的信息一起送给FC函数执行 。
Serverless在编程教育中的实践文章插图
演示如下:
Serverless在编程教育中的实践文章插图
结束语这篇文章给大家介绍了Serverless , 阿里云的Serverless产品函数计算(FC)以及基于函数计算(FC)实现的在线编程系统的Demo 。 大家应该有所体感 , 基于函数计算(FC)实现在线编程系统时 , 研发同学只需要专注在如何执行由前端传入的代码即可 , 整个Server端的各个环节都不需要研发同学和运维同学去关心 , 基本体现了Serverless的精髓 。
本文为阿里云原创内容 , 未经允许不得转载 。