プログラムでcelerybeatエントリを生成し、エントリが追加されたときにcelerybeatを再同期できるようにしたいと思っています。ここのドキュメントは述べています
デフォルトでは、エントリはCELERYBEAT_SCHEDULE設定から取得されますが、SQLデータベースにエントリを保存するなど、カスタムストアを使用することもできます。
だから私はこれを行うためにどのクラスを拡張する必要があるかを理解しようとしています。
私はセロリスケジューラのドキュメントとdjceleryapiのドキュメントを見てきましたが、これらのメソッドのいくつかが何をするかについてのドキュメントは存在しないので、いくつかのソースに飛び込もうとしていて、誰かが私を正しい方向に向けてくれることを望んでいました。
私がやっていることの高レベルが役立つと思います...ユーザーとして、事前定義された一連のタスクから選択し、ユーザーがそのためのある種のカスタムスケジュールを選択する方法を提供できる必要があります。毎日/週/月と何曜日と何時のように実行します。
また、これはdjceleryを使用したDjangoにあります。
アップデート
djcelery adminのコードは表示されますが、そのデータがどのように保持されているかがわかりません。私は現在addTask
、次のような一般的なビューを持っています:
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:警告/ビート]プロセスビート:
[2012-03-06 00:23:07,926:警告/ビート]トレースバック(最後の最後の呼び出し):
[2012-03-06 00 :23:07,926:WARNING /Beat]ファイル"/usr/lib/python2.7/multiprocessing/process.py"、258行目、_bootstrap
[2012-03-06 00:23:07,926:WARNING /Beat]self。 run()
[2012-03-06 00:23:07,927:警告/ビート]ファイル "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat .py "、行464、実行中
[2012-03-06 00:23:07,927:警告/ビート] self.service.start(embedded_process = True)
[2012-03-06 00:23:07,927:警告/ビート]ファイル"/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/celery/beat.py"、行403、開始時
[2012-03-06 00:23:07,927:警告/ビート]間隔= self.scheduler.tick()
[2012-03-06 00:23:07,927:警告/ビート]ファイル "/ home / dchesterman / Documents / PythonDev / .virtualenvs / ros / local / lib / python2.7 / site-packages / celery / beat.py "、行194、ティック
[2012-03-06 00:23:07,927:警告/ビート] next_time_to_run = self .maybe_due(entry、self.publisher)
[2012-03-06 00:23:07,927:警告/ビート]ファイル "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site -packages / celery / beat.py "、行170、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:警告/ビート]ファイル "/home/dchesterman/Documents/PythonDev/.virtualenvs/ros/local/lib/python2.7/site-packages/djcelery/schedulers.py" 、54行目、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'オブジェクトには属性がありません'is_due'
スケジュールがデフォルトを使用しない理由がわかりませんis_due()