INTEGRITY Документация

Как работают Python Workers

Workers, написанные на Python, выполняются Pyodide. Pyodide представляет собой CPython (эталонная реализация Python, которую часто называют просто «Python»), скомпилированная в WebAssembly.

Когда вы пишете Python Worker, ваш код выполняется напрямую через Pyodide внутри изолированной среды V8. См. Как работает Workers чтобы узнать больше.

Локальная разработка

Базовый Python Worker включает файл Python с Default класс, расширяющий WorkerEntrypoint, например:

from workers import Response, WorkerEntrypoint

class Default(WorkerEntrypoint):
    async def fetch(self, request):
        return Response("Hello world!")

...и конфигурационный файл Wrangler который указывает на этот .py файле:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "hello-world-python-worker",
	"main": "src/entry.py",
	// Set this to today's date
	"compatibility_date": "2026-08-28"
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "hello-world-python-worker"
main = "src/entry.py"
# Set this to today's date
compatibility_date = "2026-08-28"

Когда вы выполняете uv run pywrangler dev для локальной разработки среда выполнения Workers сделает следующее:

  1. Определите, какая версия Pyodide требуется, исходя из вашей даты совместимости
  2. Установите все необходимые пакеты в зависимости от вашего pyproject.toml файл
  3. Создайте новый v8 isolate для вашего Worker и автоматически внедрите в него Pyodide
  4. Запуск кода Python с помощью Pyodide

Дополнительные инструменты сборки или этапы предварительной компиляции не требуются. Среда выполнения Python предоставляется непосредственно рантаймом Workers, так же как это происходит для Workers, написанных на JavaScript.

См. Примеры на Python чтобы узнать, как использовать Python в Workers.

Жизненный цикл развертывания и оптимизация холодного старта

Чтобы сократить время холодного старта, при развёртывании Python Worker Cloudflare заранее, на этапе развёртывания, выполняет как можно больше ресурсоёмкой работы. Когда вы запускаете uv run pywrangler deploy, происходит следующее:

  1. Wrangler загружает ваш код на Python и все пакеты, включённые в pyproject.toml к Workers API.
  2. Cloudflare отправляет ваш код на Python в среду выполнения Workers для проверки.
  3. Cloudflare создаёт новый изолят v8 для вашего Worker и автоматически внедряет в него Pyodide.
  4. Cloudflare выполняет входной модуль Worker и всё, что он импортирует на верхнем уровне, а затем делает снимок линейной памяти WebAssembly Worker. По сути, ресурсоёмкая инициализация выполняется на этапе развёртывания, а не во время выполнения запроса.
  5. Cloudflare развёртывает этот снимок вместе с кодом Python вашего Worker в сети Cloudflare.

Когда в ваш Worker поступает запрос, мы загружаем этот снимок и используем его для запуска Worker в изоляте, что позволяет избежать затратной по времени инициализации:

Диаграмма: как Python Workers развёртываются в Cloudflare

См. статья в блоге о выходе Python Workers с подробностями об оптимизациях производительности и о том, как среда выполнения Workers сокращает холодный старт для Python Workers.

Версии Pyodide и Python

Новая версия Python выходит каждый год в августе, а новая версия Pyodide выходит спустя шесть (6) месяцев. Когда выходит новая версия Pyodide, мы добавляем её в Workers, скрывая за Compatibility Flag, который включается только после указанной Compatibility Date. Благодаря этому мы можем постоянно поставлять обновления без риска изменений, нарушающих обратную совместимость, и распространяем на Python то же обязательство, которое взяли для JavaScript.

Каждый релиз Python имеет пятилетний (5 лет) период поддержки. Когда этот период поддержки для конкретной версии Python заканчивается, патчи безопасности для неё больше не выходят, и полагаться на такую версию небезопасно. В соответствии с политикой Workers Runtime никогда не нарушать работу приложений, работающих в продакшене, существующие Python Workers на версиях вне периода поддержки продолжат работать. Однако мы не рекомендуем использовать версии Python вне периода поддержки для новых проектов и не будем выпускать патчи для проблем, возникающих при использовании этих версий. Мы также не можем гарантировать, что эти более старые версии Python не будут работать медленнее, включая более высокую задержку или расход процессорного времени.