为 Lambda“编译”Python3 是一个好习惯吗?

Vit*_*ich 3 python amazon-web-services python-3.x aws-lambda

在 Bash 中我可以这样做:

python3 -OO -m py_compile myscript.py

__pycache__在内部构建部署 zip,对于我可以运行的多个脚本:

python3 -OO -m compileall .

在同一底层 AMI 映像中执行此操作。

这对于 AWS Lambda 性能提升是否明智?

tho*_*ace 5

答案是肯定的,但这可能有点过早的优化。

Lambda 的性能有两个部分:

  1. 为每个并发执行传输、构建和初始化容器
  2. 每次执行时运行代码

.pyc文件为您提供了一些优化 1 或“冷启动”时间。这是因为您只能传送文件pyc,并且它们往往更小(减少传输时间),并且因为您已经编译为字节代码,这省去了构建过程的一个步骤(请注意,python 仍在进一步编译,但这仍然是一种优化)。

坦率地说,如果这足以证明部署时增加的复杂性以及 lambda 控制台中代码的不透明性是合理的,我会感到惊讶。因此,在您对实际代码中的任何内容进行优化之前,我会挑战您使用 X-Ray 之类的工具进行分析。

(注意 MapBox 有一篇关于减小大小和讨论部署效果的好文章.pychttps://blog.mapbox.com/aws-lambda-python-magic-e0f6a407ffc6

  • 是的-因为AWS(和Python,来吧)没有通过[filename].handler_function找到它是否正在导入一个模块并运行该函数;模块可以是 pyc。 (2认同)