Cloudflare 宣布 Python Workers 正式可用,开发者可直接在 Cloudflare Workers 运行时运行 Python Web 框架和 AI 编排库,无缝集成 D1、R2、Workers AI。
Python Workers 正式发布(GA)
两年前我们推出了 Python Workers,为在 Cloudflare Workers 运行时中运行 Python 应用提供了一种途径。我们的目标是让用 Python 写 Workers 和用 TypeScript 一样简单,并让 Python 包和框架的生态「开箱即用」。
今天,Python Workers 正式发布(GA)。
GA 意味着什么?这意味着 Python 现已成为 Cloudflare 开发者平台上的一等公民,完全支持。你可以使用你已经熟悉的 Python 代码、库和设计模式,并将它们无缝连接到 Workers AI、R2、D1、Hyperdrive、Durable Objects、Queues、Workflows 以及 Cloudflare 平台的其他服务。你还可以在 Python Workers 中运行 FastAPI、Django 和 Flask 等流行的 Python 框架。甚至可以使用 Dynamic Workers 在另一个 Worker 中创建一个 Python Worker。
from fastapi import FastAPI, Request
from workers import asgi, WorkerEntrypoint
app = FastAPI()
@app.get("/")
async def root(request: Request):
env = request.scope["env"]
return await env.AI.run(
"@cf/openai/gpt-oss-120b",
{
"instructions": "You are a friendly assistant.",
"input": "What is the origin of the phrase Hello, World?",
},
)
Default = asgi.entrypoint(app)
Python Workers 的演进之路
将 Python 引入 Cloudflare Workers 是一个自然的选择。由于 Workers 自 2018 年起就支持 WebAssembly,这为我们运行 Wasm 编译的 Python 解释器提供了完美环境。通过使用 Pyodide,我们得以在 Cloudflare Workers 中快速支持广泛的 Python 应用。
我们的目标是创建第一个可以让 Python 应用无限扩展的平台,同时让它像在其他任何地方开发 Python 应用一样简单和高性能。
今天重点介绍的功能是多年努力的成果。许多开发者已经在 Python Workers 中构建应用;今天,我们将这些能力推向生产环境,向所有人开放。
Python 成为 Cloudflare Workers 运行时中的一等语言
Python Workers 现已原生支持 Cloudflare 开发者平台绑定。此前,在 Python Workers 中使用这些 Cloudflare 绑定需要显式地在 RPC 边界处将 Python 对象转换为 TypeScript 对象。例如,将一个 Python 字典发送到 Cloudflare Queue 需要以下胶水代码才能工作:
from pyodide.ffi import to_js
import js
self.env.QUEUE.send(to_js({"key": "value"}, dict_converter=js.Object.fromEntries))
这要求 Python 开发者在编写 Python Workers 时始终关注 JavaScript 环境和代码,对人类和 AI 代理来说都是常见的错误来源。为了解决这个问题,我们将整个类型转换过程封装在了 Workers 运行时和 Python SDK 中。这让你可以用纯 Python 的方式使用所有 Cloudflare 绑定,无需编写任何 JavaScript 代码,使以下代码可以直接工作:
self.env.QUEUE.send({"key": "value"})
Web 框架:FastAPI、Django 和 Flask
你现在可以在 Python Workers 中运行你最喜爱的 Python 框架(如 FastAPI、Django 或 Flask)来构建 API 服务器。我们实现了一个内置连接器,可以用来将你的 Web 应用轻松连接到 Python Workers。
假设你有一个简单的 FastAPI Web 应用:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
message = "Hello, world!"
return {"message": message}
在原生环境中,你会使用 uvicorn 这样的 Web 服务器来运行这个应用。
$ uvicorn main:app
在 Python Workers 中,你可以使用我们提供的 workers.asgi 包来运行相同的应用,只需在代码中添加这段代码:
from workers import asgi
class Default(WorkerEntrypoint):
async def fetch(self, request):
return await asgi.fetch(app, request, self.env)
# or equivalently
Default = asgi.entrypoint(app)
同样,你可以使用 workers.wsgi 包来运行同步 Web 应用(如 Django)。
from workers import WorkerEntrypoint, wsgi
from your_django_app.wsgi import app
Default = wsgi.entrypoint(app)
那么底层发生了什么?
Python 有一个标准的合约来规定 Web 应用如何与 Web 服务器通信,称为 Web Server Gateway Interface(WSGI),或其现代的异步对应物 ASGI。这个标准允许开发者构建完全与服务器无关的应用。在传统部署中,Uvicorn 或 Gunicorn 等 Web 服务器负责处理多个并发客户端连接和线程以扩展流量,而 FastAPI 等 Web 框架可以专注于应用逻辑本身。
在 Cloudflare Workers 中,Workers 平台本身充当 Web 服务器。由于我们的全球网络已经无缝处理了负载均衡和无限扩展,我们不需要在 Python Workers 中运行一个服务器来重复造轮子。
相反,我们的 workers.asgi 和 workers.wsgi 连接器充当一个轻量、优化过的桥梁。它们将传入的原生 JavaScript 请求转换为 Python 应用期望的标准 WSGI/ASGI 结构,并将响应无缝地以最小开销传回。通过这种方式,Python 开发者获得了两全其美的体验:你可以使用你喜爱的 Web 框架编写和组织代码,同时让 Cloudflare Workers 平台在全球范围内即时扩展你的 API,而无需配置任何服务器。
这些连接器不仅可用于 FastAPI、Django 或 Flask,还可用于任何使用 WSGI 或 ASGI 接口的 Python Web 框架。
你可以在 Python Workers 文档中找到有关使用各个 Web 框架的更多信息。
使用 Hyperdrive 连接 PostgreSQL 和 MySQL
如果你正在使用 PostgreSQL 或 MySQL 等关系数据库构建 Python 应用,你现在可以将 Hyperdrive 集成到 Python Workers 中。
此前,Python Workers 不支持 TCP 套接字,导致数据库驱动无法使用。要理解为什么这是一个障碍,你需要了解 WebAssembly 的运作方式。aiomysql 或 asyncpg 等 Python 数据库驱动依赖标准库的 socket 模块来建立连接。在标准环境中,这个模块向底层操作系统发起 POSIX 系统调用。而在 WebAssembly 沙箱中,这些 POSIX 网络 syscalls 通常是始终失败的桩实现。任何尝试打开标准套接字都会立即失败。为了解决这个问题,我们使用 Workers connect API 实现了套接字系统调用。
当数据库驱动尝试打开 TCP 连接时,它会经过我们的自定义套接字 syscall 实现。它将打开连接、读取字节等标准 Python 套接字操作转换为 Workers 运行时使用的相应 JavaScript 调用。由于这种转换发生在系统调用级别,你的数据库驱动完全不需要了解底层实现。
这个套接字桥正是我们 Hyperdrive 集成得以实现的原因。要在 Python Workers 中使用 Hyperdrive,首先将你的数据库与 Hyperdrive 连接,并在 Wrangler 配置中设置绑定:
"hyperdrive": [
{
"binding": "HYPERDRIVE_MYSQL",
"id": "<example id: 57b7076f58be42419276f058a8968187>",
}
]
然后,使用你熟悉的数据库驱动连接到 Hyperdrive:
import aiomysql
from workers import WorkerEntrypoint
class Default(WorkerEntrypoint):
async def fetch(self, request):
hd = self.env.HYPERDRIVE_MYSQL
conn = await aiomysql.connect(
host=hd.host,
port=int(hd.port),
user=hd.user,
password=hd.password,
db=hd.database,
ssl=None,
)
cur = await conn.cursor()
await cur.execute("SELECT username FROM user")
r = await cur.fetchall()
await cur.close()
conn.close()
你可以参考 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,为在浏览器运行时中运行 Python 的平台制定标准,称为 PyEmscripten。经过一年多的讨论和完善,该提案已被接受,使包维护者能够为 PyEmscripten 平台构建和发布包,并在所有实现 PyEmscripten 的环境中可用。
我们还稳定了现有的 Pyodide 构建工具链,并将其演变为所有包维护者都可以访问的形式,使开发者能够轻松为 PyEmscripten 平台构建包。此外,我们还在 cibuildwheel 中添加了 PyEmscripten 平台支持,使其他人更容易采用对 PyEmscripten 平台的支持。
虽然生态仍在采用这一标准,但我们希望未来每个 Python 包都有一个能在 WebAssembly 中工作的 wheel。我们还正在与主要的包维护者积极合作,添加 PyEmscripten 构建。如果你遇到尚未支持的包,请在 Discord 或 GitHub 上告诉我们,我们的团队将努力构建它。
你也可以查看我们在 EuroPython 2026 的演讲:「Python Everywhere: The State of Python on WebAssembly」,了解我们是如何实现这一点的。
在 Python 中构建 AI 代理和管道
丰富的数据科学和机器学习包生态使 Python 成为构建智能代理和 AI 管道的自然选择。但将这些引入 Python Workers 一直以来都面临挑战:openai 和 langchain 等库依赖 requests 或 httpx 等 HTTP 客户端来与外部 API 通信。然而,由于 Python Workers 缺少底层套接字操作支持,这些 HTTP 客户端无法正常工作。
为了解决这个问题,我们向上游贡献了代码,确保这些 HTTP 客户端可以在 WebAssembly 环境中通过 JavaScript fetch API 直接路由请求。结合我们在上一节中解释的对底层套接字操作的新支持,整个网络栈在 Python Workers 内部可以无缝工作。
因此,你现在可以在 Python Workers 中原生运行 openai、langchain 和 mcp 等 AI 库。你还可以将它们与 Workers AI 结合,在 Cloudflare 网络中的 GPU 上运行无服务器推理,或通过 Cloudflare AI Gateway 代理请求。
下面的示例展示了如何在 langchain 中运行 Workers AI 模型,使用 langchain-cloudflare 包:
from langchain_cloudflare import ChatCloudflareWorkersAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from workers import Response, WorkerEntrypoint
class Default(WorkerEntrypoint):
async def fetch(self, request):
prompt = PromptTemplate.from_template(
"In one sentence, describe a great day in the life of an {profession}."
)
llm = ChatCloudflareWorkersAI(
model_name="@cf/meta/llama-3.3-70b-instruct-fp8-fast",
binding=self.env.AI,
max_tokens=64,
)
chain = prompt | llm | StrOutputParser()
result = await chain.ainvoke({"profession": "electrician"})
return Response.json({"result": result})
今天你可以构建什么
我们在 python-workers-examples 仓库中汇集了一系列生产级模式。以下是你如何将 Python Workers 与 Cloudflare 生态结合使用的一些方式。
异步 AI 编排
构建全栈 AI 应用通常意味着连接多个服务,如存储、队列和推理。本示例展示瞭如何在纯 Python Workers 中构建一个 AI 驱动的图生图生成器。它接收用户请求,将它们放入 Cloudflare Queue,并使用 Workflows 通过 Workers AI 编排图像生成步骤,最后将图像存储到 R2 存储桶中。

使用 Bluesky Jetstream 进行实时流处理
消费实时事件流通常需要一台专用服务器来维护连接。在本示例中,我们使用 Python Worker 连接到 ATProto/Bluesky Jetstream WebSocket。通过用 Durable Object 支持此连接,Python Worker 可以维护长期状态,确保 WebSocket 连接保持活跃。

更多示例等你探索
使用官方 Python MCP 包构建和部署 MCP 服务器,为你的 AI 助手提供边缘数据访问能力。

使用 Workers AI 和 Cloudflare 向量数据库 Vectorize 构建 RAG 系统。

Cloudflare 开发者文档中的 Python 代码示例
我们已更新了跨 Cloudflare 产品的文档,添加了 Python 示例代码。几乎所有展示如何用 TypeScript 完成某事的代码示例,都同时提供了 Python 示例。我们致力于继续在所有产品中包含 Python 示例。你可以在我们的开发者文档中切换 JavaScript、TypeScript 和 Python 之间的代码片段。

达到 GA 只是开始。我们有许多计划让 Python Workers 变得更好,包括让 Python Workers 更高性能和更节省内存,以及支持更多包。
请继续告诉我们你想用 Python Workers 构建什么,我们将不断突破可能的边界。查看 Python Workers 文档,开始构建你的第一个 Python Worker!