2016-11-02 8 views
0

私はユーザーが複数の異なるブログを作成できるようにする単一のdjangoアプリケーションを持っています。各ブログは、モデルデータ(例えば、訪問数、クリック数など)を毎時/毎日/毎週など収集しなければならず、データが収集される間隔はブログ間で異なる場合がある。さらに、ある時点で、ユーザはデータ収集の頻度を変更したい場合がある。毎週から毎日にかけてユーザーインターフェース上に表示されます。不規則な間隔のスケジューラとしてセロリのビートを使用していますか?

公式の文書からPeriodic Tasksを見ると、設定ファイルに間隔値を 'ハードコード'する必要があり、間隔を1回だけ指定することができます。

from celery.schedules import crontab 

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

は、どのように私はこれについて行くか、またはセロリは異なる間隔で同じ種類の複数のタスクをスケジュールし、(AJAX経由)ユーザインタフェースを介して値を変更することさえ可能ですか?

+2

とビート・プロセスを開始します。 [セロリのドキュメント](http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#using-custom-scheduler-classes) – devxplorer

+0

「データ収集の頻度を変える」ワウはクールです。私はhttps://github.com/rajasimon/beatserverにこの機能を書いています –

+0

@devxplorer私は['django-celery-beat'](https://pypi.python.org/pypi/django_celery_beat)が出てきています'django-celery'に置き換えて(これが当てはまらない場合は教えてください)。私が今直面している問題は、新しいPeriodicTasksを追加すると、ビートプロセスを再開するまで実行されないということです( 'セラーリー-Aプロビート-l info -S django')。 – FatHippo

答えて

0

@devxplorerが指摘したように、django-celeryはデータベースのバックエンドを提供します。これを使用して、Django管理者からプログラムを使ってタスクを管理したり、APIを介してモデルを公開することができます。

from djcelery.models import PeriodicTask 

PeriodicTask(
    name="My First Task", 
    ... 
).create() 
all_tasks = PeriodicTask.objects.all() 
... 

その後、あなたはDjangoのadminにあなたの定期的なタスクを管理できるようにする `djcelery.schedulers.DatabaseScheduler`を、使用することができます`ジャンゴ - celery`で

$ celery -A proj beat -S djcelery.schedulers.DatabaseScheduler 
+0

私は、ビートプロセスを開始した後に定期的なタスクを作成すると、ビートプロセスを再開するまで新しいタスクが実行されないことに気付きました。新しい定期的なタスクが作成されたとき、ビートプロセスを自動的に再開するにはどうすればよいですか? – FatHippo

+0

@FatHippo外部のファイルウォッチャーを追加することができました。最後に聞いたところ、 '--autoreload'フラグは悪いjujuでした。私はそれを一度使ってみると3日間ウサギの穴に入ってしまいました。本当に微妙な仕方で物を壊したからです。私はそれが最新バージョンで削除されていると思います。 http://docs.celeryproject.org/en/latest/whatsnew-4.0.html#features-removed-for-lack-of-funding – pnovotnak

関連する問題