Skip to content

Python Workers Cloudflare GA: chạy FastAPI, Django serverless

Karify98 & Amy 🌸·
Cover Image for Python Workers Cloudflare GA: chạy FastAPI, Django serverless

Cloudflare vừa công bố Python Workers chính thức GA (general availability) sau hai năm phát triển. Điểm đáng chú ý nhất không phải là "Python chạy được trên Workers" — điều đó đã có từ trước. Cái mới là Python giờ dùng được các binding của Cloudflare (D1, R2, Queues, Hyperdrive...) mà không cần viết một dòng JavaScript glue code nào.

Chuyện gì vừa xảy ra

Theo blog chính thức đăng ngày 21/9, Cloudflare giới thiệu Python Workers lần đầu cách đây hai năm, chạy trên Pyodide — bản Python biên dịch sang WebAssembly. Từ bản thử nghiệm đó đến GA, đội ngũ Cloudflare tập trung giải quyết ba giới hạn lớn. Đó là: gọi binding phải convert kiểu dữ liệu thủ công, không chạy được framework web chuẩn, và không mở được TCP socket nên driver database không hoạt động.

Ở bản GA, cả ba giới hạn này đều đã được xử lý.

Binding giờ "just work" theo kiểu Python

Trước đây, gửi một dict Python vào Cloudflare Queue cần đoạn glue code kiểu này:

from pyodide.ffi import to_js
import js

self.env.QUEUE.send(to_js({"key": "value"}, dict_converter=js.Object.fromEntries))

Giờ chỉ cần:

self.env.QUEUE.send({"key": "value"})

Toàn bộ quá trình convert kiểu dữ liệu giữa Python và JavaScript được đóng gói vào runtime và Python SDK. Với developer, điều này nghĩa là không phải nhớ "đang chạy trong môi trường JS" khi viết code Python — vốn là nguồn lỗi phổ biến cho cả con người lẫn AI coding agent, theo chính lời Cloudflare.

Chạy được FastAPI, Django, Flask thật sự

Python Workers giờ hỗ trợ workers.asgi cho ứng dụng bất đồng bộ (FastAPI) và workers.wsgi cho ứng dụng đồng bộ (Django, Flask). Cơ chế này không chạy một server Python bên trong Worker — thay vào đó, nó dùng chuẩn WSGI/ASGI sẵn có để dịch request JavaScript gốc sang cấu trúc mà framework Python hiểu, rồi trả response ngược lại. Cloudflare Workers platform đóng vai trò web server, xử lý load balancing và scale — developer chỉ cần viết logic ứng dụng như bình thường.

from workers import asgi

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        return await asgi.fetch(app, request, self.env)

Kết nối Postgres/MySQL qua Hyperdrive

Đây là phần kỹ thuật đáng chú ý nhất. Python Workers chạy trong sandbox WebAssembly, mà driver database như asyncpg hay aiomysql cần mở TCP socket qua module socket chuẩn của Python — thứ vốn không tồn tại trong Wasm. Cloudflare giải quyết bằng cách implement lại socket system call, chuyển hướng chúng qua Workers connect API. Kết quả: driver database dùng bình thường, không cần biết gì về lớp translate bên dưới.

Kết hợp với Hyperdrive, Python Worker giờ kết nối trực tiếp Postgres/MySQL production mà không cần proxy riêng.

Hệ sinh thái package: PEP 783 và PyEmscripten

Vấn đề còn lại là package có native extension (C/C++/Rust) phải cross-compile sang WebAssembly mới chạy được, và trước đây không có chuẩn chung cho việc này — Cloudflare phải tự build và host thủ công. Để giải quyết tận gốc, Cloudflare đề xuất PEP 783, chuẩn hóa nền tảng PyEmscripten cho Python chạy trong môi trường trình duyệt/Wasm. Sau hơn một năm thảo luận, PEP được chấp thuận. Cloudflare cũng thêm hỗ trợ PyEmscripten vào cibuildwheel — công cụ phổ biến để build wheel đa nền tảng — giúp maintainer package dễ dàng build cho nền tảng này hơn.

Đây là dạng đóng góp mang lại lợi ích cho cả cộng đồng Pyodide, không chỉ riêng Cloudflare.

AI agent và pipeline chạy được bằng Python thật

Thư viện như openai, langchain, mcp dựa vào HTTP client (requests, httpx) để gọi API ngoài — vốn không hoạt động trong Python Workers vì thiếu socket cấp thấp. Cloudflare đã đóng góp ngược (upstream) để các client này route request qua fetch API của JavaScript khi chạy trong môi trường WebAssembly. Kết hợp với socket bridge cho Hyperdrive, toàn bộ networking stack giờ hoạt động trơn tru bên trong Python Workers.

So what — ảnh hưởng gì tới developer?

  • Không cần học lại stack: team quen Python/FastAPI/Django có thể deploy thẳng lên edge network của Cloudflare mà không phải viết TypeScript hay học API mới
  • Database production dùng được ngay: Hyperdrive + driver quen thuộc (asyncpg, aiomysql) nghĩa là không cần kiến trúc lại data layer chỉ để chạy serverless
  • AI agent viết bằng Python native: langchain, mcp, openai chạy thẳng, kết hợp Workers AI để inference ngay trên network Cloudflare — không cần server riêng để host agent
  • Vẫn có giới hạn: package chưa có wheel PyEmscripten sẽ không chạy được — hệ sinh thái đang trong giai đoạn chuyển đổi, chưa phải mọi package PyPI đều sẵn sàng

Cái đáng chú ý không phải là "thêm một runtime hỗ trợ Python" — GitHub Actions, Lambda, hay Vercel đều đã làm vậy từ lâu. Điểm khác biệt là Cloudflare chọn cách khó hơn: giải quyết tận gốc bài toán native extension trên WebAssembly bằng một PEP chính thức, thay vì chỉ patch riêng cho nền tảng của mình. Nếu PyEmscripten được các nền tảng khác (Pyodide, browser runtime) áp dụng rộng rãi, đây có thể là bước ngoặt cho việc chạy Python trong trình duyệt nói chung, không chỉ trên Cloudflare Workers.

Điều cần biết

  • Python Workers GA sau hai năm phát triển, chạy trên Pyodide (Python biên dịch sang WebAssembly)
  • Binding Cloudflare (D1, R2, Queues, Hyperdrive) dùng trực tiếp bằng cú pháp Python, không cần convert sang JavaScript thủ công
  • FastAPI, Django, Flask chạy được qua workers.asgi/workers.wsgi, không cần viết lại app
  • Hyperdrive kết nối Postgres/MySQL production trực tiếp từ Python Worker
  • PEP 783 (PyEmscripten) đã được chấp thuận, mở đường cho package Python native extension build cho WebAssembly
  • Giới hạn còn lại: package chưa có wheel PyEmscripten vẫn chưa chạy được

Bài viết được hỗ trợ bởi AI (Amy 🌸). Nội dung đã được kiểm duyệt bởi tác giả.

Related Posts