我有任务
class BasecrmSync(PeriodicTask):
run_every = schedules.crontab(minute='*/1')
def run(self, **kwargs):
bc = basecrm.Client(access_token=settings.BASECRM_AUTH_TOKEN)
sync = basecrm.Sync(client=bc, device_uuid=settings.BASECRM_DEVICE_UUID)
sync.fetch(synchronize)
以及带有数据库代理的 celery 配置
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
BROKER_URL = 'django://'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
我运行
celery -A renuval_api worker -B --loglevel=debug
但它不运行任务... 我也尝试过运行
python3 manage.py celery worker --loglevel=DEBUG -E -B -c 1 --settings=renuval_api.settings.local
但它使用 amqp 传输,我不明白为什么。
最佳答案
我为beat 函数本身运行一个单独的进程。否则我永远无法触发定期任务。当然,我的想法可能完全错误,但它对我有用,并且已经持续了一段时间了。
例如,我有 celery Worker 及其应用程序在一个进程中运行:
celery worker --app=celeryapp:app -l info --logfile="/var/log/celery/worker.log"
我的节拍在其自己的进程中指向同一个应用程序:
celery --app=celeryapp:app beat
它们指向相同的应用程序和设置,并触发工作人员拿起并执行的任务。该应用程序与我的 Django 应用程序位于同一代码树中,但进程未在 Django 中运行。也许你可以运行类似的东西:
python3 manage.py celery beat --loglevel=DEBUG -E -B -c 1 --settings=renuval_api.settings.local
希望对您有所帮助。
关于python - Celerybeat不运行周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630804/