Skip to main content

Simple job queue

Project description

CatLine

このプロジェクトは簡易的な非同期 ジョブキューを実装するための物です。

注意事項

  • threading を用いた並列処理はサポート・テストしていません
  • Queue クラスは イベントループ作成後にインスタンス化してください。
  • 優先度は 0 ~ 9 であり、 0に近づくほど優先度が高くなります。

使い方

以下が例になります。 このコードの意味をまとめると以下のようになります

  • ジョブが実行された際に引数で渡されたジョブの名前で meow と出力する
  • 優先度が0のcatには VIP を先頭につけ、それ以外のcatは normal をつける
  • 待機中のジョブが0になった際にループを終了し、キューを停止させる
import asyncio
import random
from catline.adapters.json_adapter import QueueStorageJSONAdapter
from catline.queue import Queue

async def say_meow(cat_name: str):
    print(f'{cat_name}: meow' + '!' * random.randrange(1,10))


async def main():
    cat_queue = Queue('cat',  QueueStorageJSONAdapter(), say_meow)
    cat_queue.run()
    for i in range(random.randrange(1, 20)):
        priority = random.randrange(0, 9)
        await cat_queue.add(priority, f'{"VIP" if priority == 0 else "normal"} cat{i}') # type: ignore
    while True:
        waiting_cat_number = await cat_queue.count_jobs('waiting')
        print(f'waiting cat number: {waiting_cat_number}')
        await asyncio.sleep(1)
        if waiting_cat_number == 0:
            break
    cat_queue.stop()
    print('finish!!!')

if __name__ == '__main__':
    asyncio.run(main())

実装予定の機能

機能 説明 状態
ジョブの追加 ジョブをキューに追加できる
ジョブの実行 キューにあるジョブをスケジューラーで実行できる
ジョブのリトライ ジョブが失敗した際に再実行できる ×
ジョブの優先度 ジョブを追加する際優先度を指定できる
スケジューラーの実行間隔 スケジューラーがジョブを実行するまでの間隔を変更できる
キューストレージの変更 キューをredisやjsonに保存する際自分でadapterを作れる
threadingのサポート 並列処理のサポート ×
実行するジョブの上限変更 同時に実行できるジョブの数を変更できる

ストレージを自分で作成する方法

このプロジェクトではキューのジョブを保存するためのクラスをアダプターパターンで作成しているため、それに沿ってクラスを作成すれば作成が可能です。

また、デフォルトで json 又は redis を用いた保存方法がライブラリに同封されているため、特段理由が無い場合はそちらを使うことを推奨します。

注意点

  1. ジョブを取得する際に優先度順に取得するなどといった処理を自分で作成する必要があります。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

catline-0.0.3.tar.gz (27.8 kB view details)

Uploaded Source

Built Distribution

catline-0.0.3-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file catline-0.0.3.tar.gz.

File metadata

  • Download URL: catline-0.0.3.tar.gz
  • Upload date:
  • Size: 27.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for catline-0.0.3.tar.gz
Algorithm Hash digest
SHA256 0616a73b46708e42ab92040bb7ab94afe019afddaa0413e1395ec2c77ce94edb
MD5 5035b490f777c68df14fd6a47d881b41
BLAKE2b-256 abe64bae6b0716959c7c1a790e6c39335bfd276c8c4164bc1dd232f9c0cc21be

See more details on using hashes here.

File details

Details for the file catline-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: catline-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 9.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for catline-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 df98f49c7a65a5989df3d226ec4696ad9ae96a65b7501be3cbddd5170a9d56e8
MD5 5aecf95905e22caf74ba9fdfc4b9fd76
BLAKE2b-256 ffb9dbb9a28b184be214bfcce2c808fa655f99bf2e2ae6bf2e9653b5b28a641c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page