我有任务
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_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传输,我无法理解为什么。
答案 0 :(得分:1)
我为节拍功能本身运行一个单独的过程。否则,我永远无法获得定期任务。当然,我可能完全错了,但它对我有用并且已经有一段时间了。
例如,我让芹菜工作者在一个过程中运行其应用程序:
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
我希望有所帮助。