2017-11-24 3 views
2

私はdjango-celeryhttps://pypi.python.org/pypi/django-celery/)を使用して、セロリの拍動(周期タスク)のスケジュールをDBに保存しています。しかし、バージョン3.1.25以降のセロリはサポートしていません。私はセロリ4.1.0に移動したいので、dbベースのスケジュールのためにdjango-celery-beathttps://pypi.python.org/pypi/django_celery_beat)に移動することを検討していました。django_celery_beatはcrontabスケジュールを複数分/時間でサポートしていますか?

データとともにテーブル構造を正常に移行することができました。しかし、私は、djceleryがサポートしている複数の分と時間を持つcrontabスケジュールをサポートしていないdjango-celery-beatがあることを知っています。

たとえば、このcrontabのスケジュールを考える - 15,30,45 0,1 * * *

タスクは12時15分、12時30分、12時45分、1時15分、1時30分、1時45分で日常実行されます。これは、ジャンゴ・セロリーで働いていました。しかし、ジャンゴ・セロリ・ビートでは、12:15に実行されたように見えます(最初のインスタンス)。

旧セットアップ - Django==1.10, celery==3.1.24, django-celery==3.1.17

新しいセットアップ - Django==1.11.7, celery==4.1.0, django-celery-beat==1.1.0

は誰でもジャンゴ・セロリ・ビートに削除されているようにcrontabのスケジュールのためにサポートしているか否かを確認することはできますか?もしそれが動作するはずです、それはセロリやジャンゴ - セロリ - ビートの問題ですか?

おかげ

+0

うーん...あなたがDBからそれらを引っ張るとき、あなたはリストにこれらを持っていますか?そして、あなたは[get_or_create](http://django-celery-beat.readthedocs.io/en/latest/#example-creating-crontab-based-periodic-task)を使いますか? – mutantkeyboard

+0

@mutantkeyboardこれは、 'django-celery'を使って作成されたdb内の既存のスケジュールです。私も新しいものを作成しようとしましたが、get_or_createでは作成しませんでした。私は 'CrontabSchedule'オブジェクトを直接作成して保存しました。私はget_or_createを使用しないと違いが出ますか? – ksrini

+0

だから私はあなたがapp.conf.beat_scheduleは= { #は午前7:30 「最初のタスク」で毎週月曜日の朝に実行 ' のようなものがあると仮定:{ 「タスク」:「tasks.add」、 のスケジュールを':タスク:'タスク: 'crontab(時間= 7、分= 30、day_of_week = 1)、 ' args ':(16,16)、 }、 ' second-task ':{ (16,16)、 } } {crontab(hour = 12、minute = 30、day_of_week = 1)、 } 'は、各タスクの辞書のコレクションでなければなりません。 – mutantkeyboard

答えて

0

はあなたがデータベースにリスト値を指定した方法を正確にを確認することはできますか?

私はこのようなリストが動作するように見えました: '5,10,15'。たとえば、私は次のようなスケジュールを持っています:

0,4,8,12,16,20,24,28,32,36,40,44,48,52,56 *

これは、django-celery-beat ==で指定されています(1,2,3,4,5,6,7,8,9,10,11,12(m/h/d/dM/MY) 1.1.0、セロリ== 4.1.0、Django == 2.0.1。

crontab = {} 
for attr in ['minute', 'hour', 'day_of_week', 'day_of_month', 'month_of_year']: 
    crontab[attr] = str(list(getattr(schedule, attr)))[1:-1] 
self.object.schedule = CrontabSchedule.objects.create(**crontab) 

データベースフィールドは、日・オブを格納するために使用されるので、私はバグを報告するしかし程度午前:celery.schedule.crontabオブジェクトから次のように正確には、私はこのようなscheduleと呼ばれるコールを構築しました月は64文字で、「1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17」という最悪のシナリオでは短すぎますスペースを含まない83文字または113文字である18,19,20,21,22,23,24,25,26,27,28,29,30,31 'である。

+0

上記のバグは[#122](https://github.com/celery/django-celery-beat/issues/122)として提出されています。 –

+0

私はリストの括弧を使いませんでした。これは、djceleryの中で括弧を使わないで動作していました。したがって、疑問。 – ksrini

+0

私は理解しています。そして、私は単体テストを見直しました。AFAICSでは、カンマで区切られたリストも大括弧で囲まれています。たとえば、[テスト](https://github.com/ShaheedHaque/django-celery-beat/blob/2074b42a2cbc52e25f6318d7f360f755e8fc87f7/t/unit/test_schedulers.py#L411)を参照してください。だからこそ私は、コードをどのように呼び出しているかを正確に示すように頼んだのです。あなたの問題が何であるかを推測するのは難しいとは思えません。 –

関連する問題