Celery 4.0.1
とDjango 1.10
を使用しており、タスクの実行に問題があります。ここではセロリの構成は次のとおりです。add_periodic_taskを使用してCelery(celerybeat)で定期的にタスクを設定する
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
app = Celery('myapp')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.BROKER_URL = 'amqp://{}:{}@{}'.format(settings.AMQP_USER, settings.AMQP_PASSWORD, settings.AMQP_HOST)
app.conf.CELERY_DEFAULT_EXCHANGE = 'myapp.celery'
app.conf.CELERY_DEFAULT_QUEUE = 'myapp.celery_default'
app.conf.CELERY_TASK_SERIALIZER = 'json'
app.conf.CELERY_ACCEPT_CONTENT = ['json']
app.conf.CELERY_IGNORE_RESULT = True
app.conf.CELERY_DISABLE_RATE_LIMITS = True
app.conf.BROKER_POOL_LIMIT = 2
app.conf.CELERY_QUEUES = (
Queue('myapp.celery_default'),
Queue('myapp.queue1'),
Queue('myapp.queue2'),
Queue('myapp.queue3'),
)
はその後tasks.pyに私が持っている:views.pyで
@app.task(queue='myapp.queue1')
def my_task(some_id):
print("Doing something with", some_id)
を、私は、このタスクをスケジュールする:
def my_view(request, id):
app.add_periodic_task(10, my_task.s(id))
その後、私は実行しますコマンド:
sudo systemctl start rabbitmq.service
celery -A myapp.celery_app beat -l debug
celery worker -A myapp.celery_app
タスクは次のとおりです。決して予定はありません。ログには何も表示されません。私の見解では私がそうするので、仕事は働いています:
def my_view(request, id):
my_task.delay(id)
タスクが実行されます。
私は手動でタスクをスケジュールする場合は、このそれが動作するように私の設定ファイルの場合:
app.conf.CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'tasks.my_task',
'schedule': 10.0,
'args': (66,)
},
}
私は動的にタスクをスケジュールすることはできません。何か案が?
をマージされました:することが可能ですapp-levelで 'add_periodic_task()'を使う、つまり 'task.py'で?これは、アプリケーション内で宣言されたこれらの定期的なタスクを維持するためのカプセル化のほうが優れているようです。 –
実際に 'app.conf.CELERYBEAT_SCHEDULE'設定構文を使用するだけであれば、実際にはそれを使う必要はありませんが、明示的に使いたい場合は' task.py'ファイル。 – DhiaTN
私は、最新のリリース(4.1.0以降)では、これに対処する必要があると思います。ここにある開発者は[#3958](https://github.com/celery/celery/pull/3958)です。 –