ホームページ  >  記事  >  バックエンド開発  >  Django で簡単なスケジューラを作成する方法

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

DDD
DDDオリジナル
2024-10-20 16:16:02594ブラウズ

How to create a simple scheduler in Django

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

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

Django アプリで、management という名前のフォルダー/パッケージを作成します。そのフォルダー内に、commands という名前の別のフォルダーを作成します。コマンドフォルダーに、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 を使用することをお勧めします。

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

以上がDjango で簡単なスケジューラを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。