2012-03-03 30 views
11

エントリが追加されたときにセロビートエントリをプログラムで生成し、セロビットを再同期できるようにしたいと考えています。ドキュメントhere状態がセロリとDjangoでセロリートエントリをプログラムで生成する方法

By default the entries are taken from the CELERYBEAT_SCHEDULE setting, but custom stores can also be used, like storing the entries in an SQL database.

だから、私はこれを行うことができるように拡張する必要がどのクラス把握しようとしています。

私はcelery scheduler docsとを見てきましたが、これらの方法のいくつかに関する文書は存在していないので、何らかの情報源に潜入していて、誰かが正しい方向に向けることを期待していました。

私がやっていることの高水準は参考になると思います...ユーザーとしては、あらかじめ定義されたタスクセットから選択し、ユーザーが何らかの種類のカスタムを選択できるようにする必要があります日/週/月、曜日、曜日などの実行スケジュール。

これはdjceleryでDjangoにもあります。

UPDATE

私はdjcelery管理者のためのコードを参照してくださいが、そのデータが永続化されている方法に明確ではありませんよ。データはデシベルで正しい見えますが、デーモンが実行されるとき、それは、このエラーが発生しました

def addTask(request): 

intervalSchedule = IntervalSchedule.from_schedule(schedule(timedelta(seconds=10))) 
intervalSchedule.save() 
modelData = dict(
    name="dcTestPersist", 
    task="technologytrackerapi.views.createRecord", 
    schedule=intervalSchedule, 
) 
periodicTask = PeriodicTask(**modelData) 
periodicTask.save() 
return render_to_response('taskView.html') 

[2012-03-06 00:23:07,926: WARNING/Beat] Process Beat:
[2012-03-06 00:23:07,926: WARNING/Beat] Traceback (most recent call last):
[2012-03-06 00:23:07,926: WARNING/Beat] File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
[2012-03-06 00:23:07,926: WARNING/Beat] self.run()
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 464, in run
[2012-03-06 00:23:07,927: WARNING/Beat] self.service.start(embedded_process=True)
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev /.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 403, in start
[2012-03-06 00:23:07,927: WARNING/Beat] interval = self.scheduler.tick()
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 194, in tick
[2012-03-06 00:23:07,927: WARNING/Beat] next_time_to_run = self.maybe_due(entry, self.publisher)
[2012-03-06 00:23:07,927: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py", line 170, in maybe_due
[2012-03-06 00:23:07,927: WARNING/Beat] is_due, next_time_to_run = entry.is_due()
[2012-03-06 00:23:07,928: WARNING/Beat] File "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/djcelery/schedulers.py", line 54, in is_due
[2012-03-06 00:23:07,928: WARNING/Beat] return self.schedule.is_due(self.last_run_at)
[2012-03-06 00:23:07,928: WARNING/Beat] AttributeError: 'NoneType' object has no attribute 'is_due'

なぜ私の私はわからないんだけど、私は現在、このようになります一般的なaddTaskビューを持っていますスケジュールでデフォルトを使用していませんis_due()

答えて

6

これは私のために働いてしまったものです:

def addTask(request): 

    intervalSchedule = IntervalSchedule.from_schedule(schedule(timedelta(seconds=10))) 
    intervalSchedule.save() 

    modelData = dict(
     name="dcTestPersist", 
     task="technologytrackerapi.tasks.createRecord", 
     interval_id=intervalSchedule.pk, 
) 

    periodicTask = PeriodicTask(**modelData) 
    periodicTask.save() 

    me = ModelEntry(periodicTask) 

    try: 
     me.save() 

    except: 
    from django.db import connection 
    print connection.queries 
    raise 

    return render_to_response('taskView.html') 

私はModelEntryで定期的なタスクをラップする必要がありました。

+0

何らかの理由で、私はこれを実行してスケジュールされたタスクを作成し、 'ModelEntry'でラップする必要はありません。理由やModelEntryが何であるか分かりません。ランダムノート - 私は 'expires'を設定していて、何の効果もないことに困惑しました。それは効果がありますが、 'cellybeat'では' cellybeat'ではなく 'celerybeat'で無期限にトリガし続けますが、' expires'の後で 'celeryd'はそれを無視します。 – Chris

+0

djceleryの一部で、djangoとの統合です。あなたがそれを使用しているかどうかはわかりません。 https://github.com/celery/django-celery 私はそれを疑うでしょう。見えなくなりました。これは4歳です。 – Dustin

+0

@ダスティンは後に来るかもしれない他の人のためのメモを書いているようにあまり尋ねていませんでした。あなたの答えは、インターネット上でCeleryBeatのPeriodicTaskをプログラムでスケジューリングする最も単純な例です!残りの部分は設定ファイルを使うか、答えの一部だけを与えます。 (私はdjceleryを使用しています - データベースのバックエンドはどこから来たのでしょうか? 'djcelery.models import *'から) – Chris

1

あなたがしたいことは、PeriodicTaskをデータベースに追加することです。 https://github.com/ask/django-celery/blob/master/djcelery/admin.pyの下のセクションのように見えるのは、管理者のタスクでの追加方法です。フロントエンドで同様のものを提供する必要があります。

+0

答えに移動する必要があります... – Dustin

関連する問題