1. ホーム
  2. python

[解決済み] スケジュールされたジョブを設定する?

2022-03-17 14:48:11

質問

Django を使って Web アプリに取り組んでいますが、定期的に実行するジョブをスケジュールする方法があるかどうか気になります。

基本的に私は、データベースを通過して、自動的かつ定期的にいくつかの計算や更新を行いたいのですが、これを行うためのドキュメントを見つけることができません。

どなたか設定方法をご存じないでしょうか?

はっきり言って、私は cron ジョブがありますが、Django にこの機能を提供する機能があるかどうか知りたいと思います。 私は、人々が多くの設定をすることなく (できればゼロで) このアプリを自分でデプロイできるようにしたいのです。

私は、サイトに最後にリクエストが送られた時からジョブが実行されるべきであったかどうかを単純にチェックすることによって、これらのアクションをquot;retroactively" トリガーすることを考えましたが、私はもう少しきれいなものを望んでいます。

どのように解決するのですか?

私が採用した解決策のひとつは、このような方法です。

1) カスタム管理コマンド は、例えば

python manage.py my_cool_command

2)使用する cron (Linuxの場合)または at (Windowsの場合)で、必要なタイミングでコマンドを実行します。

これは、重いAMQPスタックをインストールする必要がない、シンプルなソリューションです。しかし、他の回答で言及されているように、Celeryのようなものを使用することには素晴らしい利点があります。特に、Celeryを使えば、アプリケーションのロジックをcrontabファイルに分散させる必要がないのが良いところです。しかし、Cronソリューションは、小規模から中規模のアプリケーションで、多くの外部依存を必要としない場合、非常にうまく機能します。

EDIT

Windowsの新しいバージョンでは at コマンドは、Windows 8、Server 2012 以降では非推奨です。この場合 schtasks.exe を使用することができます。

アップデート **** **** これは、新しい リンク カスタム管理コマンドを記述するための django ドキュメントの