← Cloudflare Workers / workers / languages / python
Foreign Function Interface (FFI)
Через Pyodide ↗, Python Workers предоставляют Foreign Function Interface (FFI) ↗ в JavaScript. Это позволяет:
- Используйте привязки к ресурсам Cloudflare, включая Workers AI, Vectorize, R2, KV, D1, Queues, Durable Objects, Service Bindings и многое другое.
- Используйте глобальные объекты JavaScript, например
Request,Response, а такжеfetch(). - Используйте полный набор функций Cloudflare Workers: если API доступен в JavaScript, он также доступен в Python Worker, где можно писать исключительно на Python.
Подробности о Foreign Function Interface Pyodide описаны здесь ↗, и Workers, написанные на Python, могут в полной мере этим воспользоваться.
Использование Bindings в Python Workers
Привязки позволяют вашему Worker взаимодействовать с ресурсами Cloudflare Developer Platform. Объявляя привязку в Worker, вы предоставляете ему определённую возможность, например читать и записывать файлы в R2 bucket.
Например, чтобы получить доступ к KV пространство имён из Python Worker, необходимо объявить следующее в файле конфигурационный файл Wrangler:
{
"main": "./src/index.py",
"kv_namespaces": [
{
"binding": "FOO",
"id": "<YOUR_KV_NAMESPACE_ID>"
}
]
}main = "./src/index.py"
[[kv_namespaces]]
binding = "FOO"
id = "<YOUR_KV_NAMESPACE_ID>"...а затем вызовите .get() для объекта привязки, который доступен в env:
from workers import WorkerEntrypoint, Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
await self.env.FOO.put("bar", "baz")
bar = await self.env.FOO.get("bar")
return Response(bar) # returns "baz"Преобразование Python в JavaScript
Иногда для взаимодействия с API JavaScript требуется преобразовать объект Python в JavaScript. Pyodide предоставляет to_js функцию для упрощения этого преобразования.
from js import Object
from pyodide.ffi import to_js as _to_js
from workers import WorkerEntrypoint, Response
# to_js converts between Python dictionaries and JavaScript Objects
def to_js(obj):
return _to_js(obj, dict_converter=Object.fromEntries)Подробнее см. в документация о pyodide.ffi.to_js ↗.
Использование глобальных объектов JavaScript в Python Workers
Мы рекомендуем использовать workers модуль, который предоставляется нашим workers-runtime-sdk пакет, чтобы обращаться к глобальным объектам JavaScript в более питоническом стиле.
Однако если вам по какой-либо причине нужно обращаться к глобальным объектам JavaScript напрямую, вы можете импортировать их из js модуль.
Например, обратите внимание, как Response импортируется из js в примере ниже:
from workers import WorkerEntrypoint
from js import Response
class Default(WorkerEntrypoint):
async def fetch(self, request):
return Response.new("Hello World!")См. Примеры на Python чтобы узнать, как вызывать функции JavaScript из Python, в том числе console.log и логирования, предоставляя возможность Response, и разбор JSON.