Cloudflare正式推出Python Workers
Cloudflare AI··作者 Hood Chatham
关键信息
Python Workers通过基于Pyodide的WebAssembly编译Python解释器运行,运行时现在会自动处理Python对象与Cloudflare绑定之间的类型转换。内置的ASGI和WSGI连接器分别支持FastAPI等异步框架以及Django、Flask等同步应用,同时Dynamic Workers可以在另一个Worker中创建Python Worker。
资讯摘要
Cloudflare两年前推出了Python Workers,目标是让开发者像使用TypeScript编写Workers一样简单地在Workers运行时运行Python应用。如今Python Workers正式进入全面可用阶段,这意味着Python不再只是实验性能力,而是Cloudflare开发者平台中正式支持的一等语言。开发者可以将已有的Python代码、软件包和开发模式带到Workers,并把应用连接到Workers AI、R2、D1、Hyperdrive、Durable Objects、Queues和Workflows等服务。平台还支持FastAPI、Django和Flask等主流Python Web框架,并允许开发者通过Dynamic Workers在另一个Worker中创建Python Worker。
Cloudflare利用Workers自2018年以来对WebAssembly的支持,基于Pyodide这一编译为WebAssembly的Python解释器实现了该能力。此次正式发布的重要改进之一,是Python现在可以原生使用Cloudflare绑定,从而不再需要在远程过程调用边界手动把Python对象转换为JavaScript对象。例如,Python字典现在可以直接发送到Queue,无需使用Pyodide转换辅助函数,也无需编写JavaScript胶水代码。平台还提供内置的ASGI和WSGI连接器,使现有的FastAPI、Django和Flask应用能够通过较少改动适配Workers运行时。

资讯正文
Python Workers 现已正式发布(GA)
两年前,我们推出了 Python Workers,为在 Cloudflare Workers 运行时中运行 Python 应用提供了一种方式。我们的目标是让使用 Python 编写 Workers 像使用 TypeScript 一样简单,并让 Python 生态中的各种软件包和框架能够“直接运行”。
如今,Python Workers 已正式发布(GA)。
GA 意味着什么?这意味着 Python 现已成为 Cloudflare Developer Platform 上受到全面支持的一等语言。你可以使用自己已经熟悉的 Python 代码、库和设计模式,并将它们无缝连接到 Workers AI、R2、D1、Hyperdrive、Durable Objects、Queues、Workflows 以及 Cloudflare 平台的其他服务。你还可以在 Python Workers 中运行 FastAPI、Django 和 Flask 等热门 Python 框架。甚至可以通过 Dynamic Workers,在一个 Worker 内创建另一个 Python Worker。
```python
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 应用一样简单且高性能。
我们今天重点介绍的功能,是这项多年努力的成果。许多开发者已经在 Python Workers 中构建应用;如今,我们将这些能力正式打造为面向所有人的生产就绪功能。
Python 现已成为 Cloudflare Workers 运行时中的一等语言
Python Workers 现在原生支持 Cloudflare Developer Platform 绑定。此前,在 Python Workers 中使用这些 Cloudflare 绑定,需要在 RPC 边界显式地将 Python 对象转换为 TypeScript 对象。例如,要将 Python 字典发送到 Cloudflare Queue,必须使用以下胶水代码才能正常工作:
```python
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 代码,以下代码即可直接运行:
```python
self.env.QUEUE.send({"key": "value"})
```
Web 框架:FastAPI、Django 和 Flask
现在,你可以在 Python Workers 中运行自己喜欢的 Python 框架(例如 FastAPI、Django 或 Flask),以构建 API 服务器。我们实现了一个内置连接器,你可以使用它轻松地将 Web 应用连接到 Python Workers。
假设你有一个简单的 FastAPI Web 应用:
```python
from fastapi import FastAPI
async def root():
message = "Hello, world!"
return {"message": message}
```
在原生环境中,你会使用 uvicorn 之类的 Web 服务器来运行此应用。
```shell
$ uvicorn main:app
```
在 Python Workers 中,只需将以下代码片段添加到代码中,就可以使用我们提供的 workers.asgi 包运行同一个应用:
```python
from workers import asgi
class Default(WorkerEntrypoint):
async def fetch(self, request):
return await asgi.fetch(app, request, self.env)
# 或者等价地
```
同样,你也可以使用 workers.wsgi 包来运行 Django 等同步 Web 应用。
```python
from workers import WorkerEntrypoint, wsgi
from your_django_app.wsgi import app
Default = wsgi.entrypoint(app)
```
那么,底层究竟发生了什么?
Python 为 Web 应用与 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 网络系统调用通常只是始终失败的存根。任何打开标准套接字的尝试都会立即失败。为了解决这个问题,我们使用 Workers connect API 实现了套接字系统调用。
当数据库驱动尝试打开 TCP 连接时,它会经过我们自定义的套接字系统调用实现。该实现会把打开连接、读取字节等标准 Python 套接字操作,转换为 Workers 运行时所使用的对应 JavaScript 调用。由于这种转换发生在系统调用层面,因此数据库驱动完全不需要了解底层实现。
正是这个套接字桥接层,让我们的 Hyperdrive 集成成为可能。要在 Python Workers 中使用 Hyperdrive,首先需要将数据库连接到 Hyperdrive,并在 Wrangler 配置中设置绑定:
"hyperdrive": [
"binding": "HYPERDRIVE_MYSQL",
"id": "<example id: 57b7076f58be42419276f058a8968187>",
}
然后,使用你熟悉的数据库驱动连接到 Hyperdrive:
import aiomysql
from workers import WorkerEntrypoint
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,为一种名为 PyEmscripten、用于在浏览器运行时中运行 Python 的平台制定标准。经过一年多的讨论和完善,这项提案最终获得接受,使软件包维护者能够为 PyEmscripten 平台构建并发布软件包,并让所有实现 PyEmscripten 的环境都可以使用这些软件包。
我们还稳定了现有的 Pyodide 构建工具链,并将其发展为所有软件包维护者都可以使用的形式,使开发者能够轻松地为 PyEmscripten 平台构建软件包。此外,我们还为 cibuildwheel 添加了 PyEmscripten 平台支持,让其他人更容易采用对 PyEmscripten 平台的支持。
尽管生态系统仍在逐步采用这一标准,但我们希望未来每个 Python 软件包都能拥有一个可在 WebAssembly 中运行的 wheel。我们也在积极与主要软件包维护者合作,以添加 PyEmscripten 构建支持。如果你遇到尚不受支持的软件包,请在 Discord 或 GitHub 上告诉我们,我们的团队会努力完成构建。
你还可以观看我们在 EuroPython 2026 上的演讲《Python 无处不在:Python 在 WebAssembly 上的现状》,了解我们是如何实现这一目标的。
在 Python 中构建 AI 智能体和流水线
庞大的数据科学和机器学习软件包生态系统,使 Python 成为构建智能体和 AI 流水线的自然选择。但过去,将这些能力引入 Python Workers 一直面临挑战:openai 和 langchain 等库依赖 requests 或 httpx 之类的 HTTP 客户端与外部 API 通信。然而,由于 Python Workers 缺少对底层 socket 操作的支持,这些 HTTP 客户端无法正常工作。
为了解决这一问题,我们向上游贡献代码,确保这些 HTTP 客户端能够在 WebAssembly 环境中直接通过 JavaScript fetch API 路由请求。结合上一节所述的全新底层 socket 操作支持,这使得整个网络栈能够在 Python Workers 中无缝运行。
因此,现在你可以在 Python Workers 中原生运行 openai、langchain 和 mcp 等 AI 库。你还可以将它们与 Workers AI 结合,在 Cloudflare 的网络中利用 GPU 运行无服务器推理,或者通过 Cloudflare AI Gateway 代理请求。
下面的示例展示了如何在 langchain 中运行 Worker 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
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 编排
Python Workers 现已正式发布
构建全栈 AI 应用通常意味着需要连接存储、排队和推理等多个服务。本示例展示了如何完全使用 Python Workers 构建由 AI 驱动的图像到图像生成器。它接收用户请求,将请求放入 Cloudflare Queue,并使用 Workflows 通过 Workers AI 编排图像生成步骤,然后将图像存储到 R2 存储桶中。
使用 Bluesky Jetstream 进行实时流处理
消费实时事件流通常需要专用服务器来维持连接。在本示例中,我们使用 Python Worker 连接到 ATProto/Bluesky Jetstream WebSocket。通过使用 Durable Object 为该连接提供支持,Python Worker 可以维护长期状态,确保 WebSocket 连接保持活动状态。
更多示例
Model Context Protocol(MCP)服务器
使用官方 Python MCP 软件包构建和部署 MCP 服务器,让你的 AI 助手能够访问边缘数据。
使用 Vectorize 的检索增强生成(RAG)系统
使用 Workers AI 和 Vectorize(Cloudflare 的向量数据库)构建 RAG 系统。
Cloudflare 开发者文档中的 Python 代码示例
我们已经更新了 Cloudflare 各产品的文档,加入 Python 示例代码。几乎所有展示如何使用 TypeScript 完成某项操作的代码示例,都同时提供了 Python 版本。我们将继续在所有产品的文档中加入 Python 示例。在开发者文档中,你可以随时在 JavaScript、TypeScript 和 Python 之间切换代码片段。
接下来是什么?
达到正式可用(GA)阶段只是开始。我们计划通过多种方式改进 Python Workers,包括提升其性能和内存效率,以及支持更多软件包。
请继续告诉我们你希望使用 Python Workers 构建什么,我们也将继续拓展其可能性。查看 Python Workers 文档,开始构建你的第一个 Python Worker!
来源与参考
收录于 2026-09-22