Два года назад мы представили Python Workers, предоставив возможность запускать приложения на Python в среде выполнения Cloudflare Workers. Наша цель заключалась в том, чтобы сделать написание Workers на Python таким же простым, как на TypeScript, и обеспечить бесперебойную работу экосистемы пакетов и фреймворков Python.
Сегодня Python Workers становятся общедоступными (GA).
Что означает GA? Это значит, что Python теперь является первоклассным и полностью поддерживаемым языком на платформе Cloudflare Developer Platform. Вы можете перенести уже знакомый вам код на Python, библиотеки и паттерны проектирования и легко подключить их к Workers AI, R2, D1, Hyperdrive, Durable Objects, Queues, Workflows и остальным компонентам платформы Cloudflare. Вы также можете запускать популярные фреймворки Python, такие как FastAPI, Django и Flask, внутри Python Workers. Вы даже можете создать Python Worker внутри другого Worker с помощью Dynamic Workers.
Путь развития Python Workers
Интеграция Python в Cloudflare Workers была естественным шагом. Поскольку Workers поддерживает WebAssembly с 2018 года, это предоставило нам идеальную среду для запуска интерпретатора Python, скомпилированного в Wasm. Используя Pyodide, мы смогли быстро обеспечить поддержку широкого спектра приложений на Python в Cloudflare Workers.
Наша цель состояла в том, чтобы создать первую платформу для бесконечно масштабируемых приложений на Python, сделав разработку такой же простой и производительной, как и в любой другой среде.
Функции, которые мы представляем сегодня, являются результатом многолетней работы. Многие разработчики уже создают приложения с помощью Python Workers; сегодня мы делаем эти возможности готовыми к производственному использованию для каждого.
Python теперь является первоклассным языком в среде выполнения Cloudflare Workers
Python Workers теперь нативно поддерживают привязки (bindings) Cloudflare Developer Platform. Раньше использование этих привязок Cloudflare в Python Workers требовало явного преуобразования объектов Python в объекты TypeScript на границе RPC. Например, отправка словаря Python в Cloudflare Queue требовала следующего вспомогательного кода для работы:
Это заставляло разработчиков Python держать в уме среду JavaScript и код при написании Python Workers, и это было частым источником ошибок как для людей, так и для агентов AI. Чтобы решить эту проблему, мы инкапсулировали весь процесс преобразования типов в среде выполнения Workers и в SDK Python. Это позволяет использовать все привязки Cloudflare в питоничном стиле без написания ни единой строки кода на JavaScript, благодаря чему следующий код просто работает:
Веб-фреймворки: FastAPI, Django и Flask
Теперь вы можете запускать свой любимый фреймворк Python, такой как FastAPI, Django или Flask, для создания сервера API в Python Workers. Мы реализовали встроенный коннектор, который вы можете использовать для легкого подключения вашего веб-приложения к Python Workers.
Допустим, у вас есть простое веб-приложение на FastAPI:
В нативных средах вы бы использовали веб-сервер вроде uvicorn для запуска этого приложения.
В Python Workers вы можете запустить то же приложение, используя предоставляемый нами пакет workers.asgi, просто добавив этот фрагмент в свой код:
Аналогичным образом вы можете использовать пакет workers.wsgi для запуска синхронных веб-приложений, таких как Django.
Итак, что же происходит «под капотом»?
В Python существует стандартный контракт взаимодействия веб-приложений с веб-серверами, известный как Интерфейс шлюза веб-сервера (WSGI) или его современный асинхронный аналог ASGI. Этот стандарт позволяет разработчикам создавать приложения, полностью независимые от сервера. При традиционном развертывании веб-серверы вроде Uvicorn или Gunicorn отвечают за обработку множества одновременных клиентских подключений и потоков для масштабирования трафика, в то время как веб-фреймворки вроде FastAPI могут полностью сосредоточиться на логике приложения.
В Cloudflare Workers сама платформа Workers служит веб-сервером. Поскольку наша глобальная сеть уже легко справляется с балансировкой нагрузки и бесконечным масштабированием, нам не нужно изобретать велосипед, запуская сервер внутри Python Workers.
Вместо этого наши коннекторы workers.asgi и workers.wsgi действуют как тонкий, оптимизированный мост. Они преобразуют входящий нативный запрос JavaScript в стандартные структуры WSGI/ASGI, которые ожидают приложения Python, и беспрепятственно возвращают ответ с минимальными накладными расходами. Благодаря этому разработчики Python получают лучшее от обоих миров: вы можете писать и организовывать код, используя ваши любимые веб-фреймворки, в то время как платформа Cloudflare Workers мгновенно масштабирует ваш API по всему миру без необходимости настройки сервера.
Эти коннекторы можно использовать не только с FastAPI, Django или Flask, но и с любым веб-фреймворком Python, использующим интерфейс WSGI или ASGI.
Вы можете найти дополнительную информацию об использовании каждого веб-фреймворка в документации Python Workers.
Использование PostgreSQL и MySQL с Hyperdrive
Если вы создаете приложение на Python с использованием реляционных баз данных, таких как PostgreSQL или MySQL, теперь вы можете интегрировать Hyperdrive в Python Workers.
Ранее Python Workers не поддерживали сокеты TCP, что делало драйверы баз данных недоступными. Чтобы понять, почему это было препятствием, нужно посмотреть на то, как работает WebAssembly. Драйверы баз данных Python, такие как aiomysql или asyncpg, полагаются на модуль сокетов стандартной библиотеки для установления connectий. В стандартной среде этот модуль выполняет системные вызовы POSIX к базовой операционной системе. Внутри песочницы WebAssembly эти сетевые системные вызовы POSIX обычно являются заглушками, которые всегда завершаются ошибкой. Любая попытка открыть стандартный сокет немедленно завершилась бы сбоем. Чтобы решить эту проблему, мы реализовали системные вызовы сокетов с использованием API подключения Workers.
Когда драйвер базы данных пытается открыть TCP-соединение, он проходит через нашу пользовательскую реализацию системных вызовов сокетов. Она преобразует стандартные операции с сокетами Python, такие как открытие соединения и чтение байтов, в соответствующие вызовы JavaScript, используемые средой выполнения Workers. Поскольку это преобразование происходит на уровне системных вызовов, вашим драйверам баз данных вовсе не обязательно знать о лежащей в основе реализации.
Этот мост сокетов делает возможной нашу интеграцию с Hyperdrive. Чтобы использовать Hyperdrive в Python Workers, сначала подключите базу данных к Hyperdrive и настройте привязку в конфигурации Wrangler:
Затем подключитесь к Hyperdrive, используя привычные вам драйверы баз данных:
Вы можете обратиться к документации Hyperdrive Python Workers, чтобы узнать, как использовать Hyperdrive в Python Workers и какие пакеты поддерживаются в настоящее время.
Расширение экосистемы пакетов 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. Кроме того, мы добавили поддержку платформы PyEmscripten в cibuildwheel, чтобы другим было проще внедрить поддержку платформы PyEmscripten.
Хотя экосистема все еще принимает этот стандарт, мы надеемся, что в будущем у каждого пакета Python будет wheel-пакет, работающий с WebAssembly. Мы также активно работаем с основными мейнтейнерами пакетов над добавлением сборок PyEmscripten. Если вы столкнетесь с пакетом, который еще не поддерживается, сообщите нам в Discord или GitHub, и наша команда постарается обеспечить его сборку.
Вы также можете посмотреть наше выступление на EuroPython 2026: «Python везде: состояние Python на WebAssembly», чтобы узнать, как мы это сделали.
Создание ИИ-агентов и пайплайнов на Python
Обширная экосистема пакетов для науки о данных и машинного обучения делает Python естественным выбором для создания интеллектуальных агентов и ИИ-пайплайнов. Но перенос их в Python Workers исторически представлял собой сложность: такие библиотеки, как openai и langchain, полагаются на HTTP-клиенты, такие как requests или httpx, для связи с внешними API. Тем не менее, из-за отсутствия поддержки низкоуровневых операций с сокетами в Python Workers эти HTTP-клиенты работали некорректно.
Чтобы решить эту проблему, мы внесли изменения на уровне вышестоящего ПО (upstream), чтобы гарантировать, что эти HTTP-клиенты могут направлять запросы напрямую через JavaScript fetch API в средах WebAssembly. В сочетании с нашей новой поддержкой низкоуровневых операций с сокетами, описанной в предыдущем разделе, это заставляет весь сетевой стек работать без сбоев внутри Python Workers.
В результате теперь вы можете запускать библиотеки искусственного интеллекта, такие как openai, langchain и mcp, в исходном виде внутри Python Workers. Вы также можете комбинировать их с Workers AI для запуска бессерверного вывода на графических процессорах в сети Cloudflare или проксировать запросы через Cloudflare AI Gateway.
В примере ниже показан способ запуска моделей Worker AI в langchain с использованием пакета langchain-cloudflare:
Что вы можете создать сегодня
Мы собрали коллекцию готовых к продакшену шаблонов в нашем репозитории python-workers-examples. Вот несколько способов комбинирования Python Workers с экосистемой Cloudflare.
Асинхронная оркестрация ИИ
Создание полностекового ИИ-приложения часто означает подключение нескольких служб, таких как хранилище, очереди и вывод. Этот пример показывает, как создать генератор изображений «из изображения в изображение» на базе ИИ исключительно на Python Workers. Он принимает запросы пользователей, помещает их в Cloudflare Queue и использует Workflows для оркестрации шага генерации изображений через Workers AI, а также сохраняет изображение в корзину R2.
Потоковая обработка в реальном времени с помощью Bluesky Jetstream
Потребление потока событий в реальном времени обычно требует выделенного сервера для поддержания соединения. В этом примере мы используем a Python Worker to connect to the ATProto/Bluesky Jetstream WebSocket. Обеспечивая это соединение с помощью Durable Object, Python Worker может поддерживать долгоживущее состояние, гарантируя, что WebSocket-соединение остается активным.
Другие примеры для изучения
Сервер Model Context Protocol (MCP)
Создайте и разверните MCP-сервер, используя официальный пакет Python MCP, чтобы предоставить вашим ИИ-ассистентам доступ к данным на периферии.
Система дополненной генерацией знаний (RAG) с использованием Vectorize
Создание RAG-системы с использованием Workers AI и Vectorize, векторной базы данных Cloudflare.
Примеры кода на Python в документации для разработчиков Cloudflare
Мы обновили нашу документацию по всем продуктам Cloudflare, включив в нее примеры кода на Python. Почти везде, где есть пример кода, показывающий, как что-то сделать на TypeScript, есть и пример кода на Python. Мы стремимся и дальше включать примеры на Python во все наши продукты. Вы можете переключать фрагменты кода между JavaScript, TypeScript и Python в документации для разработчиков.
Что дальше?
Достижение статуса GA — это только начало. У нас много планов по улучшению Python Workers, включая повышение их производительности и эффективности использования памяти, а также поддержку новых пакетов.
Продолжайте рассказывать нам, что вы хотите создавать на Python Workers, а мы продолжим расширять границы возможного. Ознакомьтесь с документацией по Python Workers и начните создавать своего первого Python Worker!












