Workers RPC теперь работает между Python и JavaScript, позволяя вызывать методы и передавать объекты без дополнительных настроек
Workers RPC теперь работает между Python и JavaScript, позволяя вызывать методы и передавать объекты без дополнительных настроек. Фото: из архива компании
Разработчики могут вызывать методы Python из TypeScript и наоборот, передавать функции как колбэки и обмениваться сложными объектами так, будто код написан на одном языке.
В основе этой возможности лежит Pyodide — интерпретатор CPython, скомпилированный в WebAssembly, который через свой Foreign Function Interface автоматически преобразует типы между языками: например, JavaScript-объект превращается в Python-словарь, Number — в int или float, а массив — в список, причём для пользовательских классов и функций создаются прокси-объекты, которые прозрачно перенаправляют вызовы через границу.
Для корректной работы с Web API-объектами вроде Request, Response или Blob, у которых нет прямых аналогов в Python, Cloudflare добавила пакет workers-runtime-sdk, который перехватывает такие объекты при пересечении языковой границы и превращает их в идиоматичные Python-сущности, и этот пакет включается по умолчанию при развёртывании через команду uv run pywrangler deploy.
В качестве примера приводится использование популярного Python-пакета Pygments для подсветки синтаксиса: JavaScript Worker вызывает метод Python Worker, который выполняет сложную обработку и возвращает результат, причём для связи достаточно объявить сервисную привязку в файле конфигурации wrangler.jsonc, указав имя Python-воркера, а в двух терминалах одновременно запустить npx wrangler dev и uv run pywrangler dev для локальной отладки.
Все вызовы являются асинхронными, исключения корректно распространяются между языками, а производительность практически не страдает, поскольку Workers обычно выполняются в одном потоке и RPC не требует сетевых запросов.
Упомянутый сервис
Комментариев пока не было