6

簡単な質問があったと思いますが、とにかく行き詰まりました。

単純なモデルがあるとします:

class myModel(models.Model):
    expires = models.DateTimeField(...)

そして、指定された時間に何かをしたい:メールを送信する、モデルを削除する、モデルフィールドのいくつかを変更する...何か。djangoコアにツールがあり、そうすることができますか?

または、そうでない場合は、何らかのタスク キューイング ツールが適していると思います。私はdjcelery自分のプロジェクトで作業していますが、私は完全に初心者ですが、これまでに実行できたのはdjango-celery-email、メールを非同期で送信するためにパッケージを実行することだけです。バックグラウンドで動作し、信頼できるタスクとワーカーを完全に定義できるとは言えませんが。

そのような問題を解決する方法についてのアイデアがあれば、躊躇しないでください =)

4

3 に答える 3

4
  1. 必要なタスクを実行するためのカスタム管理コマンドを記述します。完了したら、でタスクを実行できるはずですpython manage.py yourtaskname

  2. cronat、、、またはの定期的なタスクをcelery使用して、タスクをスケジュールします。django-crondjangotaskschedulerdjango-future

于 2013-07-10T11:28:16.737 に答える
1

日時を読み取り、日時に達した場合にタスクを実行するバックグラウンドタスクが最適だと思います。

スケジュールされたタスクについては、ここに記載されている解決策を参照してください

したがって、ワークフローは次のようになります。

  • 日付に達したオブジェクトに適用するタスクを作成します
  • DB の日時をチェックする管理コマンドを作成し、日時に達したすべてのオブジェクトに対して上記のタスクを実行します。
  • コマンド呼び出しをスケジュールするには、cron (Linux) または at (Windows) を使用します。
于 2013-07-10T11:20:08.527 に答える
-2

UNIX ライクなマシンを使用している場合は、cronjobsにアクセスできる可能性があります。atWindows を使用している場合、同様のことができるというプログラムがあると聞きました。これがニーズに合わない場合は、timeライブラリを使用してX時間ごとに物事を行う方法がいくつかあります(time.sleep(SOME_NUMBER_OF_SECONDS)何かを定期的に行いたい場合は、他のやりたいことをループして実行します。そうでない場合は、条件をtime.localtime()調べて確認します)。

于 2013-07-10T11:12:09.283 に答える