コンテンツにスキップ

Pythonワーカーの動作

Pythonで書かれたワーカーは、Pyodideによって実行されます。Pyodideは、WebAssemblyへのCPython(Pythonのリファレンス実装、一般的には「Python」と呼ばれます)のポートです。

Pythonワーカーを書くと、あなたのコードはPyodideによって直接解釈され、V8アイソレート内で実行されます。詳細については、ワーカーの動作を参照してください。

ローカル開発ライフサイクル

from js import Response
async def on_fetch(request, env):
return Response.new("Hello world!")

…と、.pyファイルを指すwrangler.tomlファイル:

name = "hello-world-python-worker"
main = "src/entry.py"
compatibility_date = "2024-04-01"

ローカル開発でnpx wrangler@latest devを実行すると、ワーカーランタイムは次のことを行います:

  1. 互換性の日付に基づいて必要なPyodideのバージョンを決定します。
  2. あなたのワーカーのために新しいV8アイソレートを作成し、Pyodideを自動的に注入します。
  3. Pyodideを使用してあなたのPythonコードを提供します。

追加のツールチェーンや事前コンパイルのステップは必要ありません。Python実行環境はワーカーランタイムによって直接提供され、JavaScriptで書かれたワーカーの動作を反映しています。

Pythonをワーカー内で使用する方法については、Pythonの例を参照してください。

デプロイメントライフサイクル

コールドスタート時間を短縮するために、Pythonワーカーをデプロイするとき、Cloudflareはデプロイ時に可能な限り高価な作業を事前に行います。npx wrangler@latest deployを実行すると、次のことが発生します:

  1. WranglerはあなたのPythonコードとrequirements.txtファイルをワーカーAPIにアップロードします。
  2. CloudflareはあなたのPythonコードとrequirements.txtファイルをワーカーランタイムに送信して検証します。
  3. Cloudflareはあなたのワーカーのために新しいV8アイソレートを作成し、Pyodideとrequirements.txtファイルに指定したパッケージを自動的に注入します。
  4. Cloudflareはワーカーのコードをインポート文のためにスキャンし、それを実行し、ワーカーのWebAssemblyリニアメモリのスナップショットを取得します。実質的に、デプロイ時にパッケージをインポートする高価な作業を行います。
  5. CloudflareはこのスナップショットをあなたのワーカーのPythonコードと共にCloudflareネットワークにデプロイします。

リクエストがあなたのワーカーに来ると、私たちはこのスナップショットをロードし、アイソレート内であなたのワーカーをブートストラップするために使用し、高価な初期化時間を回避します:

PythonワーカーがCloudflareにデプロイされる方法の図

パフォーマンスの最適化やワーカーランタイムがPythonワーカーのコールドスタートをどのように削減するかについての詳細は、Pythonワーカーを紹介するブログ記事を参照してください。

PyodideとPythonのバージョン

新しいバージョンのPythonは毎年8月にリリースされ、新しいバージョンのPyodideは6ヶ月後にリリースされます。この新しいバージョンのPyodideが公開されると、互換性フラグの背後にゲートを設けてワーカーに追加します。このフラグは、指定された互換性の日付の後にのみ有効になります。これにより、破壊的変更のリスクなしに継続的に更新を提供できます。これは、JavaScriptに対して行ったコミットメントをPythonにも拡張するものです。

各Pythonリリースには5年間のサポートウィンドウがあります。このサポートウィンドウが過ぎると、特定のPythonバージョンに対してセキュリティパッチは適用されなくなり、そのバージョンは信頼できなくなります。このリスクを軽減するために、安定性と長期サポートのコミットメントをできるだけ守りつつ、5年後にはサポートウィンドウ外のPythonリリースにあるPythonワーカーは自動的に次の古いPythonリリースに移行されます。Pythonは成熟した安定した言語であるため、ほとんどの場合、あなたのPythonワーカーは問題なく動作し続けると期待しています。しかし、サポートウィンドウ内に留まるために、定期的にワーカーの互換性の日付を更新することをお勧めします。