「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Django で簡単なスケジューラを作成する方法

Django で簡単なスケジューラを作成する方法

2024 年 11 月 8 日に公開
ブラウズ:431

How to create a simple scheduler in Django

クリーンアップを行うために X 分/秒ごとに関数を実行する必要がある場合、いくつかの操作をトリガーする必要がある場合は、スレッド モジュールと Django カスタム CLI を使用して単純なスケジューラを実行できます。コマンド。

5 秒ごとに関数を呼び出して、外部 API に何かを投稿したいとします。

django アプリで、management という名前のフォルダー/パッケージを作成し、そのフォルダー内に command という名前の別のフォルダーを作成します。コマンドフォルダーに、runposter.py という名前のモジュールを作成します。最終的には、 yourapp/management/commands/runposter.py.

のような構造になります。

このコードでは、5 秒ごとに停止しない限り while ループを実行するスレッドを使用します。 print("posting") を実行したい関数/ロジックに置き換えます。

# runposter.py
import time
from threading import Thread, Event
from django.conf import settings
from django.core.management.base import BaseCommand


stop_event = Event()


def my_job():
    while not stop_event.is_set():
        try:
            print("posting")
            time.sleep(5)
        except KeyboardInterrupt:
            break


class Command(BaseCommand):
    help = "Run Poster."

    def handle(self, *args, **options):

        poster = Thread(target=my_job)

        try:
            print("Starting poster...")
            poster.start()
            while poster.is_alive():
                poster.join(timeout=1)
        except KeyboardInterrupt:
            print("Stopping poster...")
            stop_event.set()
            poster.join()
            print("Poster shut down successfully!")

はい、別のターミナル ウィンドウを開いて、python manage.py runposter を実行します。ご覧のとおり、コマンド runposter は指定したモジュール名から作成されました。

もちろん、より複雑なものの場合は、rq-scheduler または celery 定期タスクまたは django-q を使用することをお勧めします。

ただし、単純な場合にはこれで十分です。

リリースステートメント この記事は、https://dev.to/climentea/how-to-create-a-simple-scheduler-in-django-1O54?1に再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3