Django+Nginx+uWSGI スケジュールされたタスクを実装する方法

WBOY
リリース: 2023-05-15 11:34:06
転載
1486 人が閲覧しました

概要

Nginx と uWSGI が設定されていない場合は、apscheduler を使用して url.py のみでスケジュールされたタスクを設定し、python manage.py 実行サーバーを使用します。これは通常どおり実行されますが、 uWSGI が完了すると、エントリは manage.py から uwsgi.py に変更されます。これには、url.py の apscheduler スケジュールされたタスクをロードするためにユーザー アクセスが必要で、同じスケジュールされたタスクがユーザーのアクセス数に応じて繰り返し開始されます。

uWSGI の cron を使用する

方法 1: url.py の apscheduler スケジュールされたタスクを uwgsi.py に移行する

方法 2: uWSGI の cron を使用する

uWSGI のcron 公式 Web サイト: https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/Cron.html

end=1
while end:
    try:
        import uwsgi
        //建立job_id为0,每天12:12启动fuc的定时器,-1代表*(全部)
        uwsgi.register_signal(0, "", fuc)
        uwsgi.add_cron(0, 12,12,-1,-1,-1)
        end=0
    except:
        pass
ログイン後にコピー

方法 1 または 2 では、uwsgi.ini worker=1

[uwsgi]
# 进程个数
workers=1
ログイン後にコピー
## を設定する必要があります。 #socket.bind ロックを使用する

uWSGI cron の使用は 1 つのプロセスに限定されています。複数のプロセスによってタイマーが繰り返し開始される場合は、socket.bind ロックを使用してスケジュールされたタスクを変換できます。

    try:
        import socket
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.bind(("127.0.0.1", 47200))
    except socket.error:
        logger.info('禁止成功')
    else:
        //定时任务方法
ログイン後にコピー

問題が発生しました。sock.bind(("127.0.0.1", 47200)) を同時に取得できる可能性があり、重複の問題は軽減できますが、完全に解決することはできません。

uWSGI の mule の使用

最初のステップ: 新しいパッケージを作成し、__init__.py

//如果是Django项目,需要加上才可以使用django的model
//import django
//os.environ.setdefault('DJANGO_SETTINGS_MODULE', '项目名.settings')
//django.setup()

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()
//scheduler.add_job不详说,具体看官网文档
scheduler.add_job(...,timezone='Asia/Shanghai')
scheduler.start()
try:
    import uwsgi
    while True:
        sig = uwsgi.signal_wait()
except Exception as err:
    pass
ログイン後にコピー

を記述します。2 番目のステップ: uwsgi.ini をセットアップし、mule = package を追加します。パッケージ名/init.py

[uwsgi]
mule = package包名/__init__.py
ログイン後にコピー

以上がDjango+Nginx+uWSGI スケジュールされたタスクを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!