Repolode
piercefreeman

piercefreeman/waymark

Postgresだけを基盤として、再起動やクラッシュ後も継続する耐久性の高いバックグラウンドワークフローとアクションを構築するPythonライブラリ。

スター
87
フォーク
5
未解決の Issue
92
最終コミット
15 時間前

これは何?

Waymarkは、サーバーの再起動やタスクのクラッシュ、長時間にわたるジョブがあっても実行を続けるバックグラウンドタスクを構築するためのライブラリです。必要な基盤はPostgresのみで、最初にサポートされる言語はPythonです。通常のasync Python関数をアクションとして記述すると、ワーカーノード上で分散実行されます。また、ループ、条件分岐、並列分岐などの通常の制御フローを使って、アクションをオーケストレーションするワークフローを記述できます。

ワークフローは、Pythonソースのrun()メソッドから一度だけ中間表現にコンパイルされ、その後、進行に応じて状態をPostgresにスナップショット保存するRustランタイムによって実行されます。クラッシュしたワークフローは中断した箇所から再開し、復旧時に元のワークフローコードが再実行されることはありません。この設計上、ワークフローではサポートされたパターンを使う必要があり、timeやuuidのような非決定的な呼び出しは明示的なアクションとしてラップする必要があります。

waymark-executorプロセスが提供する組み込みwebappでは、ワークフローのインスタンスや呼び出しのタイムライン、ノードの負荷を確認できます。また、呼び出しごとのリトライポリシーとタイムアウト、耐久性のあるsleep、cronまたはインターバルによるスケジュールにも対応しています。このプロジェクトはまだ1.0以前の段階であり、後方互換性が保証されるまでは本番環境での使用を避けるよう、メンテナーが推奨しています。

主な機能

  • 01クラッシュや再起動後も最後の状態から再開する耐久性の高いワークフロー
  • 02呼び出しごとのリトライポリシーとタイムアウトを設定できる、分散ワーカー上で実行されるアクション
  • 03ループ、条件分岐、並列処理に使うasyncio.gatherなど、通常のPython制御フロー
  • 04再起動後も継続する、秒単位から日単位までの耐久性のあるsleep
  • 05追加の基盤なしで利用できるcronおよびインターバルスケジュール
  • 06ワークフローインスタンスとノードの負荷を確認できる組み込みwebapp

ユースケース

  • メールの一括送信や、リトライとファンアウトを伴うサードパーティAPIの呼び出し
  • デプロイやクラッシュがあっても確実に完了させる必要のあるデータベースジョブの実行
  • 別個のタスクブローカーを使わない定期的なデータ同期
  • Postgresを利用するPythonアプリでの複数ステップにわたる非同期処理のオーケストレーション

クイックスタート

  1. 1

    uvでパッケージをインストールします

    uv add waymark
  2. 2

    webappを有効にして、Postgresデータベースに接続するnodeを起動します

    export WAYMARK_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/waymark export WAYMARK_HTTP_ENABLED=true uv run waymark-executor

使う前に知っておきたいこと

  • READMEでは、仕様が頻繁に変更され、1.0.0より前は後方互換性が保証されないため、現時点では本番環境で使用しないよう記載されています。
  • 現時点でサポートされている言語はPythonのみです。
  • 100ミリ秒未満の処理が必要なレイテンシに敏感なジョブや、約1万件を超えるアクションを同時に協調させる用途には適していません。

トピック

よくある質問

waymark とは?
Postgresだけを基盤として、再起動やクラッシュ後も継続する耐久性の高いバックグラウンドワークフローとアクションを構築するPythonライブラリ。 Waymarkは、サーバーの再起動やタスクのクラッシュ、長時間にわたるジョブがあっても実行を続けるバックグラウンドタスクを構築するためのライブラリです。必要な基盤はPostgresのみで、最初にサポートされる言語はPythonです。通常のasync Python関数をアクションとして記述すると、ワーカーノード上で分散実行されます。また、ループ、条件分岐、並列分岐などの通常の制御フローを使って、アクションをオーケストレーションするワークフローを記述できます。
waymark は無料で使えますか?ライセンスは?
waymark は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
waymark は今もメンテナンスされていますか?
活発にメンテナンス中。waymark の最終コミットは 2026年11月6日 です。
waymark は何に使えますか?
メールの一括送信や、リトライとファンアウトを伴うサードパーティAPIの呼び出し デプロイやクラッシュがあっても確実に完了させる必要のあるデータベースジョブの実行 別個のタスクブローカーを使わない定期的なデータ同期 Postgresを利用するPythonアプリでの複数ステップにわたる非同期処理のオーケストレーション
waymark のインストール方法は?
uvでパッケージをインストールします: uv add waymark webappを有効にして、Postgresデータベースに接続するnodeを起動します: export WAYMARK_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/waymark export WAYMARK_HTTP_ENABLED=true uv run waymark-executor
waymark はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/piercefreeman/waymark

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト