12

プログラムで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()

4

2 に答える 2

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でラップする必要がありました。

于 2012-04-25T16:50:52.203 に答える
1

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

于 2012-03-04T06:22:13.467 に答える