这是用户在 2024-11-2 21:15 为 https://developers.cloudflare.com/workers/languages/python/how-python-workers-work/ 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?
 跳到内容

 Python 工作者是如何工作的


用 Python 编写的工作由Pyodide执行。Pyodide 是CPython(Python 的参考实现,通常简称为“Python”)的 WebAssembly 移植版。


当您编写 Python Worker 时,您的代码会直接由 Pyodide 在 V8 隔离环境中解释。请参阅 工作原理 以了解更多信息。


本地开发生命周期

from js import Response
async def on_fetch(request, env):
return Response.new("Hello world!")


…带有指向 .py 文件的 wrangler.toml 文件:

name = "hello-world-python-worker"
main = "src/entry.py"
compatibility_date = "2024-04-01"


当你在本地开发中运行 npx wrangler@latest dev 时,Workers 运行时将:


  1. 确定所需的 Pyodide 版本,基于您的兼容性日期

  2. 为您的 Worker 创建一个新的 v8 隔离,并自动注入 Pyodide

  3. 使用 Pyodide 提供您的 Python 代码


不需要额外的工具链或预编译步骤。Python 执行环境由 Workers 运行时直接提供,类似于用 JavaScript 编写的 Workers 的工作方式。


请参考Python 示例以了解如何在 Workers 中使用 Python。

 部署生命周期


为了减少冷启动时间,当您部署 Python Worker 时,Cloudflare 尽可能在部署时提前完成大量昂贵的工作。当您运行 npx wrangler@latest deploy 时,以下情况发生:


  1. Wrangler 将您的 Python 代码和您的 requirements.txt 文件上传到 Workers API。

  2. Cloudflare 将您的 Python 代码和您的 requirements.txt 文件发送到 Workers 运行时进行验证。

  3. Cloudflare 为您的 Worker 创建一个新的 v8 隔离环境,并自动注入 Pyodide 以及您在 requirements.txt 文件中指定的任何包。

  4. Cloudflare 扫描 Worker 的代码以查找导入语句,执行它们,然后拍摄 Worker 的 WebAssembly 线性内存快照。实际上,我们在部署时执行导入包的昂贵工作,而不是在运行时。

  5. Cloudflare 将此快照与您的 Worker 的 Python 代码一起部署到 Cloudflare 网络。


当请求到达您的工作者时,我们加载此快照并使用它在隔离环境中引导您的工作者,从而避免昂贵的初始化时间:

Diagram of how Python Workers are deployed to Cloudflare


请参阅介绍 Python Workers 的博客文章,了解有关性能优化的更多细节,以及 Workers 运行时如何减少 Python Workers 的冷启动。


Pyodide 和 Python 版本


每年八月都会发布一个新的 Python 版本,而 Pyodide 的新版本将在六(6)个月后发布。当这个新的 Pyodide 版本发布时,我们将通过兼容性标志将其添加到 Workers 中,该标志仅在指定的兼容性日期之后启用。这使我们能够不断提供更新,而不必担心破坏性更改,从而延续我们对 JavaScript 的承诺到 Python。

Each Python release has a five (5) year support window. Once this support window has passed for a given version of Python, security patches are no longer applied, making this version unsafe to rely on. To mitigate this risk, while still trying to hold as true as possible to our commitment of stability and long-term support, after five years any Python Worker still on a Python release that is outside of the support window will be automatically moved forward to the next oldest Python release. Python is a mature and stable language, so we expect that in most cases, your Python Worker will continue running without issue. But we recommend updating the compatibility date of your Worker regularly, to stay within the support window.