Cloudflare Python Workers 正式 GA:在边缘运行 FastAPI、Django 和 AI Agent 栈

两年前我们推出了 Python Workers,提供了一种方式运行 Python 应用程序在Cloudflare Workers运行时。我们的目标是让用Python编写Worker和TypeScript一样简单,并让Python包和框架的生态系统“简单地”运行“起来。
如今,Python Workers 现已普遍可用(通用版)。
GA是什么意思?这意味着Python现在已成为Cloudflare开发者平台上一流且完全支持的语言。你可以将你已经掌握的Python代码、库和设计模式无缝连接到Workers AI、R2、D1、Hyperdrive、Durable Objects、队列、工作流以及Cloudflare平台的其他部分。
你还可以在Python Workers中运行流行的Python框架,如FastAPI、Django和Flask。你甚至可以在另一个Worker中创建Python工作者,使用动态工人.
Python Workers 背后的经历
将Python引入Cloudflare Workers是自然而然的选择。因为Workers支持了自2018年以来的WebAssembly它为我们提供了运行 Wasm 编译 Python 解释器的完美环境。
通过使用皮奥达我们能够快速支持Cloudflare Workers中各种Python应用。
我们的目标是打造第一个无限可扩展的Python应用平台,同时让开发过程和在任何地方开发Python应用一样简单高效。
我们今天重点介绍的功能都是多年努力的成果。许多开发者已经在 Python Workers 中构建应用程序;如今,我们正在让这些功能为所有人准备生产环境。
Python 现已成为 Cloudflare Workers 运行时中的一流语言
Python Workers 现在原生支持 Cloudflare 开发者平台绑定。此前,在 Python Workers 中使用这些 Cloudflare 绑定需要在 RPC 边界处将 Python 对象显式转换为 TypeScript 对象。
例如,将 Python 字典发送到 Cloudflare 队列时,需要以下粘合代码才能正常工作:
这要求Python开发者在编写Python Workers时要考虑JavaScript环境和代码,这对人类和AI代理来说都是常见的错误来源。为此,我们有封装了整个类型转换过程在 Workers 运行时和 Python SDK 中。
这允许你以 Python 方式利用所有 Cloudflare 绑定,而无需编写一行 JavaScript 代码,使以下内容轻松运行:
Web框架:FastAPI、Django和Flask
你现在可以运行你喜欢的 Python 框架,比如 FastAPI、Django 或 Flask,用 Python Workers 构建 API 服务器。我们内置了一个连接器,方便你将网页应用连接到 Python Workers。
假设你有一个简单的FastAPI网络应用:
在本地环境中,你会使用像这样的网络服务器uvicorn来运行这个应用程序。
在 Python Workers 中,你只需在代码中添加以下片段,即可使用我们提供的 workers.asgi 包运行相同的应用程序:
同样,你可以使用workers.wsgi用于运行同步网络应用如Django的包。
那么,底层到底发生了什么?
Python 有一个标准合同,规定了 Web 应用与 Web 服务器的通信方式,称为 Web Server Gateway Interface(WSGI),或其现代异步对应物 ASGI。
该标准允许开发者构建完全与服务器无关的应用。在传统部署中,像 Uvicorn 或 Gunicorn 这样的 Web 服务器负责处理多个并发客户端连接和线程以实现流量扩展,而像 FastAPI 这样的网络框架则可以专注于应用逻辑。
在Cloudflare Workers中,Workers平台本身就是Web服务器。由于我们的全球网络已经无缝处理负载均衡和无限扩展,我们无需在Python Workers中运行服务器来重新发明轮子。
相反,我们的workers.asgi以及workers.wsgi连接器充当一个薄而优化的桥梁。它们将收到的本地JavaScript请求转换为Python应用期望的标准WSGI/ASGI结构,并无缝地将响应输出,开销最小。
通过这样做,Python开发者可以兼顾两全:你可以用喜欢的Web框架编写和组织代码,同时让Cloudflare Workers平台即时将API扩展到全球,而无需配置服务器。
这些连接器不仅可以用于FastAPI、Django或Flask,还可以用于任何使用以下条件的Python网络框架。WSGI或ASGI接口。
你可以在Python Workers 文档.
使用 PostgreSQL 和 MySQL 配合 Hyperdrive
如果你正在使用关系数据库如PostgreSQL或MySQL构建Python应用,现在可以集成了超光速引擎进入了Python工作者。
此前,Python Workers 不支持 TCP 套接字,导致数据库驱动程序无法使用。要理解为什么这是个阻碍,你需要看看 WebAssembly 的运作方式。
Python 数据库驱动程序 如aiomysql或asyncpg依赖标准库的socket模块以建立连接。在标准环境中,该模块向底层操作系统发送 POSIX 系统调用。
在 WebAssembly 沙箱中,这些 POSIX 网络系统调用通常是总是失败的存根。任何尝试打开标准套接字都会立即失败。为解决这个问题,我们使用 Workers 实现了套接字系统调用连接API。
当数据库驱动程序尝试打开 TCP 连接时,会经过我们自定义的套接字系统调用实现。它将标准的 Python 套接字操作,如打开连接和读取字节,转换成 Workers 运行时使用的相应 JavaScript 调用。
由于这种转换发生在系统调用层面,你的数据库驱动程序根本不需要知道底层实现。
这个socket桥接是我们与Hyperdrive集成的关键。要在Python Workers中使用Hyperdrive,首先将数据库与Hyperdrive连接,并在Wrangler配置中设置绑定:
然后,使用你熟悉的数据库驱动连接到Hyperdrive:
你可以参考超光驱 Python Workers 文档了解如何在 Python Workers 中使用 Hyperdrive,以及目前支持哪些软件包。
扩展WebAssembly包生态系统
由于 Python Workers 运行在 WebAssembly 沙箱中,任何带有原生 C/C++/Rust 扩展的包都必须交叉编译到 WebAssembly 才能在 Python Workers 中运行。
然而,在此之前,没有标准的方法可以将任何 Python 包交叉编译到 WebAssembly。这意味着我们的团队必须手动编译和托管自定义的 WebAssembly 包。
这大大限制了 Python Workers 中实际可用的包数量。
我们希望解决这个问题,让用户能够使用更多样化的包。然而,我们并不想仅仅构建只能在 Python Workers 中使用的包,因为那样对社区没有益处。
由于 Python Workers 是建立在 Pyodide 之上,我们希望生态系统能够以有利于 Pyodide 和整个 Python-on-WebAssembly 社区的方式演进。
为此,我们提出了一个建议PEP 783该平台标准化了一个名为 PyEmscripten 的浏览器运行 Python 平台。经过一年多的讨论和完善,该提案被接受,使包维护者能够为 PyEmscripten 平台构建和发布包包,并使其在所有实现 PyEmscripten 的环境中可用。
我们还稳定了现有的 Pyodide 构建工具链,并将其发展成对所有包维护者开放的表单,使开发者能够轻松为 PyEmscripten 平台构建包。
此外,我们还增加了对 PyEmscripten 平台的支持cibuildwheel,以便让其他人更容易支持PyEmscripten平台。
虽然生态系统仍在采用该标准,但我们希望未来每个 Python 软件包都能配备与 WebAssembly 兼容的轮子。我们也在积极与主要软件包维护者合作,添加 PyEmscripten 构建。
如果你遇到尚未支持的软件包,请在 Discord 或 GitHub 告诉我们,我们的团队会努力完成。
您也可以查看我们的网站EuroPython 2026 演讲:“Python 无处不在:WebAssembly 上 Python 的现状”看看我们是如何实现这一切的。
在 Python 中构建 AI 代理和管道
庞大的数据科学和机器学习软件生态系统使Python成为构建智能代理和AI流水线的自然选择。但将这些引入Python Workers历来面临挑战:诸如openai以及langchain依赖于 HTTP 客户端,如requests或httpx以便与外部 API 通信。
然而,由于 Python Workers 缺少低层套接字操作支持,这些 HTTP 客户端无法正常工作。
为此,我们在上游贡献了确保这些HTTP客户端能直接通过JavaScript路由请求fetchWebAssembly 环境中的 API。结合我们对底层套接字操作的新支持,如 所述,这使得整个网络栈在 Python Workers 内部无缝运行。
因此,你现在可以运行像这样的AI库openai,langchain, 和mcp原生使用 Python Workers。你也可以将它们与 Workers AI 结合,在 Cloudflare 网络中的 GPU 上运行无服务器推理,或通过 Cloudflare AI Gateway 发送代理请求。
下面的示例展示了一种在 langchain 中运行 Worker AI 模型的方法,使用朗链-云焰包装:
你今天能创造的东西
我们收集了一批可生产的纸样,在我们的Python 工人示例仓库。以下是一些将Python Workers与Cloudflare生态系统结合的方法。
异步人工智能编排
构建全栈AI应用通常意味着连接多个服务,如存储、排队和推理。这个例子展示了如何纯用 Python Workers 构建一个由 AI 驱动的图像对图像生成器。
它接受用户请求,将其放入 Cloudflare 队列,并通过 Workflow 通过 Workers AI 协调图像生成步骤,并将图像存储到 R2 桶中。
使用Bluesky Jetstream进行实时流处理
消耗大量实时事件通常需要专用服务器来维持连接。在这个例子中,我们使用一个用于连接ATProto/Bluesky Jetstream WebSocket的Python工作者.通过用持久对象支持该连接,Python 工作者可以保持长寿命状态,确保 WebSocket 连接保持活跃。
更多示例可供探讨
模型上下文协议(MCP)服务器
构建并部署MCP服务器使用官方的 Python MCP 软件包,让你的 AI 助手访问边缘数据。
带有Vectorize的检索增强生成(RAG)系统
构建RAG系统使用Workers AI和Cloudflare的矢量数据库Vectorize。
Cloudflare 开发文档中的 Python 代码示例
我们已更新了Cloudflare各产品的文档,加入了Python示例代码。几乎所有展示如何用TypeScript做某事的代码示例,也都有Python示例。
我们承诺继续在所有产品中包含Python示例。你可以在开发者文档中切换JavaScript、TypeScript和Python的代码片段。
接下来是什么?
达到通用版只是开始。我们有许多计划让 Python Workers 变得更好,包括提升性能和内存效率,以及支持更多包。
继续告诉我们你想在 Python Workers 上构建什么,我们会不断突破可能性的边界。请查看Python Workers 文档开始构建你的第一个 Python Worker!