Apache OpenWhisk Python 动作开发指南
前言
Apache OpenWhisk 是一个强大的无服务器计算平台,允许开发者以函数即服务(FaaS)的方式运行代码。本文将重点介绍如何在 OpenWhisk 中使用 Python 语言创建和部署动作(Action)。
Python 动作基础
创建简单 Python 动作
Python 动作本质上就是一个包含 main
函数的 Python 文件。这个函数接收一个字典参数并返回一个字典结果。下面是一个最简单的示例:
def main(args):
name = args.get("name", "stranger")
greeting = "Hello " + name + "!"
print(greeting) # 日志输出
return {"greeting": greeting}
这个例子展示了几个关键点:
- 动作接收
args
参数,这是一个字典 - 使用
args.get()
方法安全地获取参数 - 可以打印日志信息
- 必须返回一个字典
部署 Python 动作
使用 OpenWhisk CLI 工具部署上述动作非常简单:
wsk action create helloPython hello.py
CLI 工具会根据文件扩展名 .py
自动识别为 Python 动作,并使用 Python 3.6 运行时。
调用动作
调用 Python 动作与其他类型动作方式相同:
wsk action invoke --result helloPython --param name World
高级用法
多文件打包
当动作需要多个 Python 文件时,可以打包成 zip 文件部署。关键点:
- 入口文件必须命名为
__main__.py
- 其他辅助文件可以任意命名
打包示例:
zip -r helloPython.zip __main__.py helper.py
创建动作:
wsk action create helloPython --kind python:3 helloPython.zip
使用虚拟环境
对于需要第三方依赖的项目,可以使用虚拟环境打包:
- 准备
requirements.txt
文件列出依赖 - 使用 Docker 创建兼容的虚拟环境:
docker run --rm -v "$PWD:/tmp" openwhisk/python3action bash \
-c "cd tmp && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt"
- 打包虚拟环境和代码:
zip -r helloPython.zip virtualenv __main__.py
- 创建动作:
wsk action create helloPython --kind python:3 helloPython.zip
Python 运行时环境
OpenWhisk 的 Python 3 运行时基于 Python 3.6.1,并预装了丰富的第三方库,包括但不限于:
- Web 开发:Flask, aiohttp, Jinja2
- 数据处理:simplejson, python-dateutil
- 网络请求:requests, httplib2
- 爬虫工具:Scrapy, beautifulsoup4
- 消息队列:kafka-python
- 加密相关:cryptography, pyOpenSSL
最佳实践
- 错误处理:在动作中添加适当的异常处理
- 日志记录:使用
print()
输出日志,可在激活日志查看 - 参数验证:对输入参数进行有效性检查
- 资源清理:如有打开的资源,确保在动作结束时正确关闭
- 性能优化:对于耗时初始化,考虑使用全局变量
总结
OpenWhisk 为 Python 开发者提供了灵活的无服务器计算能力。通过本文介绍的基础动作创建、多文件打包和虚拟环境使用等方法,开发者可以构建复杂的 Python 无服务器应用。预装的丰富第三方库进一步扩展了 Python 动作的能力边界。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考