4

私はDjangoWebベースのプロジェクトに取り組んでおり、次の順序で動作するアプリケーションを構築する必要があります。

command1)ユーザーがとを入力する必要があるページを開くtime

2)Djangoアプリケーションは、ユーザーがスケジューラーを離れるまで、毎日特定の時間にそのコマンドを実行します(デフォルトではTrueです)。

私が問題に直面しているのは、次のとおりです。

1)コマンドを特定の時間に、ただし毎日どのように実行する必要がありますか。コマンドと時間を節約するために、次のモデルを作成しましたmodels.py

class commands(models.Model):
    username = models.ForeignKey(User)
    command = models.CharField(max_length=30)
    execution_time = models.DateField()

私は同じ時間を持っていますが、指定された時間に毎日それを実行する正しい方法を取得していません

pytz図書館でできるのでしょうか?

コマンドを実行するために私はparamikoライブラリを使用しています

PS:外部ライブラリを使いたくない

4

3 に答える 3

10

djangoアプリでシステム上のcronジョブを追加および削除することもできますが、もう1つのdjango風のアプローチは、Celeryを使用することです。これは、同期タスクと非同期タスクの両方を実行できるタスクキューシステムです。

Celeryの特定の機能の1つは、スケジュールされたタスクです。http: //packages.python.org/celery/userguide/periodic-tasks.html

from datetime import timedelta

CELERYBEAT_SCHEDULE = {
    "runs-every-30-seconds": {
        "task": "tasks.add",
        "schedule": timedelta(seconds=30),
        "args": (16, 16)
    },
}

また、crontabのスケジューリングを複製する期間タスクのより詳細なバージョンもあります。

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=7, minute=30, day_of_week=1),
        'args': (16, 16),
    },
}

セロリ自体はスタンドアロンですが、django-celery固有のバージョンがあります

このソリューションの利点は、システムレベルのcronタブを編集および保守する必要がないことです。これは、この正確な使用のためにdjangoに高度に統合されたソリューションです。

また、 cronを使用することの大きなメリットは、Celeryがシステムに合わせて拡張できることです。基本的なシステムcrontabを使用している場合、タスクはアプリケーションをホストするサーバーに配置されます。しかし、サイトを立ち上げて5つのWebアプリケーションノードで実行する必要がある場合はどうでしょうか。そのcrontabを一元化する必要があります。Celeryを使用している場合は、タスクを転送および保存する方法について多数のオプションがあります。これは本質的に分散されており、すべてのアプリケーションサーバーと同期して利用できます。持ち運び可能です。

于 2012-08-12T18:01:03.473 に答える
2

これを行う適切な方法は、Djangoカスタムコマンドを記述し、cronを介して実行することだと私には思えます。しかし、他の人も同様の必要性を感じ、カスタムdjangoアプリを作成しているため、運が悪いようです。django-cronを例にとってみましょう。

于 2012-08-12T18:00:48.217 に答える
0

問題の解決策は、標準cronアプリケーション(* nixシステムのタスクプランナー)です。cronを使用してスクリプトをスケジュールできます(crontabに追加することにより)。

スクリプトをDjangoアプリケーション環境で実行する必要がある場合は、関数を使用して実行するように指示することができsetup_environmentます。Djangoアプリケーションのスタンドアロンスクリプトについて詳しくは、こちらをご覧ください。

于 2012-08-12T18:00:39.797 に答える