- Cloudflare 利用 Pyodide 和 WebAssembly 在边缘原生执行 Python,从而消除了传统的服务器开销。
- 在部署过程中使用内存快照可以大幅缩短无服务器 Python 函数的冷启动时间。
- 与 ASGI/WSGI 集成,使得 FastAPI 和 Django 等流行框架能够在分布式全球网络中运行。
- RQ(Redis 队列)通过 fetch-fork-execute 生命周期为后台任务处理提供了一个强大的架构。
如果你一直关注 Python 社区,就会知道在边缘运行代码曾经是件令人头疼的事。长期以来,对于现代项目来说,要么选择笨重的服务器或托管服务,要么就只能坚持使用 JavaScript 来实现无服务器功能。但如今情况已经发生了变化,Python Workers 的出现彻底改变了这一切,它让开发者能够将 Python 逻辑部署到全球,而无需承担以往基础设施的负担。
无论您是想构建高性能 API 还是后台任务处理器,目前“工作进程”的概念都提供了两种截然不同但功能强大的实现方式。一方面,我们有Cloudflare基于 WebAssembly 的无服务器实现;另一方面,则是经典的RQ(Redis 队列)异步任务处理方法。对于任何想要扩展 Python 应用程序的人来说,这两种方法都各具优势。
Cloudflare Python Workers 的神奇之处

Cloudflare 的核心在于巧妙地运用了Pyodide,它本质上是将 CPython 编译成WebAssembly (Wasm) 用于服务器端计算。这意味着你的 Python 代码无需传统的虚拟机,而是直接在V8 隔离区内解释执行。这种架构打造了一个极其精简的执行环境,其效率堪比 JavaScript 工作进程。
在进行本地开发时,你很可能会用到pywrangler。整个过程非常流畅:运行时会检查你的兼容性日期以选择合适的 Pyodide 版本,获取pyproject.toml文件中列出的软件包,并启动一个隔离环境。由于Workers 运行时会自动处理环境注入,因此无需繁琐的预编译步骤。
优化冷启动困难

无服务器架构最大的诟病之一就是“冷启动”,而Python的启动速度历来比JS慢。Cloudflare通过在部署生命周期中完成繁重的计算来解决这个问题。部署时,系统不仅仅是上传代码;它实际上会执行顶层入口点和导入语句,从而获取WebAssembly线性内存的快照。
这个快照正是关键所在。当请求实际到达你的工作节点时,Cloudflare 会加载这个预热状态来立即启动工作节点。这绕过了耗时的初始化阶段,使 Python 体验流畅快捷,并达到生产就绪状态。
扩展生态系统和框架

对开发者而言,真正的福音在于 Python 现在是Cloudflare 平台上的主流编程语言。你不再局限于编写基础脚本,而是可以运行FastAPI、Django 和 Flask等功能强大的框架。由于 Cloudflare 充当 Web 服务器的角色,他们提供了workers.asgi 和 workers.wsgi 连接器,作为一座轻量级桥梁,将原生 JS 请求转换为这些框架所需的格式。
为了解决原生 C 扩展的难题,社区引入了PEP 783(PyEmscripten)。它规范了 Python 包交叉编译为 Wasm 的方式,这意味着我们正朝着几乎任何库都能拥有可在类似浏览器的运行时环境中运行的 wheel 包的世界迈进。此外,通过Workers Connect API实现套接字系统调用,Python Workers 现在可以通过 Hyperdrive 等现代数据库架构与 PostgreSQL 和 MySQL等关系型数据库通信,从而克服了 Wasm 沙箱的传统限制。
在边缘构建人工智能管道

Python 是人工智能领域当之无愧的王者,而这些 Workers AI 正是充分利用了这一点。通过JavaScript fetch API路由 HTTP 请求, LangChain 和 OpenAI等库可以原生运行。这使得创建复杂的AI 代理和云基础设施成为可能,这些代理和基础设施可以与Workers AI交互以进行 GPU 推理,或者使用Vectorize构建 RAG(检索增强生成)系统,同时又能与最终用户保持紧密联系。
经典的后台工作进程:RQ(Redis队列)
转而讨论传统的后端架构,工作进程通常是一个后台进程,旨在处理阻塞性或耗时较长的任务,以避免主 Web 进程卡顿。Redis队列 (RQ)是这方面的黄金标准,它充当“主力军”,持续循环地从 Redis 中拉取任务。
您可以以突发模式运行这些进程,在这种模式下,工作进程会完成所有当前任务后自动关闭,这非常适合周期性批量处理。对于生产环境,强烈建议使用systemd 或 Supervisor来保持这些进程的运行。其生命周期非常简单:工作进程启动、注册自身、从队列中取出任务,然后派生一个子进程来执行该任务,从而确保任务崩溃不会导致整个工作进程终止。
自定义 RQ 工作人员行为
根据您的需求,您可能不需要默认的基于 fork 的工作进程。对于测试环境或 Windows 环境,SimpleWorker在同一进程中运行作业,而SpawnWorker 则使用 os.spawn()。如果您有多个队列并且希望避免严格的优先级,RoundRobinWorker可以通过按顺序循环处理队列来确保公平调度。
高级用户可以将默认的pickle 序列化器替换为 JSON,以提高安全性和互操作性。您还可以实现自定义异常处理程序,以便根据作业类型以不同的方式处理故障。对于管理工作进程集群的用户,WorkerPool允许您使用单个命令启动多个工作进程实例,从而简化异步任务处理的扩展。
从 Cloudflare 基于 Wasm 的运行时的前沿无服务器功能,到 RQ 基于 Redis 的强大可靠性,Python Worker 为现代开发者提供了一套功能全面的工具包。无论您是在全球范围内部署 AI 代理,还是在后台处理海量数据队列,在这些特定环境中利用 Python 庞大的库生态系统,都能确保应用程序的可扩展性和开发者的生产力齐头并进。
