Reputation: 1273
I am trying to integrate celery version 4.2 in a django project. As per the docs I have done the changes in init.py and celery.py but when I run celery with:
python -m celery -A instaguide beat -l debug
I get the exception below. I am not sure what it is missing. The only CELERY_ setting that I have defined in my project.settings is CELERY_BROKER_URL and it doesn't complain about not connecting to broker. So it is something else that I am missing either in my settings or somewhere else. Any clues?
celery-worker | k (most recent call last):
celery-worker | File "/usr/local/lib/python2.7/runpy.py", line 174, in _run_module_as_main
celery-worker | "__main__", fname, loader, pkg_name)
celery-worker | File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code
celery-worker | exec code in run_globals
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/__main__.py", line 20, in <module>
celery-worker | main()
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/__main__.py", line 16, in main
celery-worker | _main()
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/celery.py", line 322, in main
celery-worker | cmd.execute_from_commandline(argv)
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/celery.py", line 496, in execute_from_commandline
celery-worker | super(CeleryCommand, self).execute_from_commandline(argv)))
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/base.py", line 275, in execute_from_commandline
celery-worker | return self.handle_argv(self.prog_name, argv[1:])
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/celery.py", line 488, in handle_argv
celery-worker | return self.execute(command, argv)
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/celery.py", line 420, in execute
celery-worker | ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/worker.py", line 223, in run_from_argv
celery-worker | return self(*args, **options)
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/base.py", line 238, in __call__
celery-worker | ret = self.run(*args, **kwargs)
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/bin/worker.py", line 257, in run
celery-worker | **kwargs)
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/worker/worker.py", line 96, in __init__
celery-worker | self.app.loader.init_worker()
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/loaders/base.py", line 114, in init_worker
celery-worker | self.import_default_modules()
celery-worker | File "/usr/local/lib/python2.7/site-packages/celery/loaders/base.py", line 108, in import_default_modules
celery-worker | raise response
celery-worker | celery.schedules.ParseException: empty filter
Upvotes: 0
Views: 889
Reputation: 1273
I figured out the problem. If one is using Default Beat Scheduler, then one needs to define the beat scheduler config with at least one scheduled tasks. Else if one is using database scheduler then it requires django-celery-beat which creates and stores the schedules in the database. So one needs to have at least 1 entry for repeatable tasks. Also the @periodic_task annotation is deprecated and going to be removed in celery-5, it doesn't seem to work.
app.conf.beat_schedule = {
# Executes every minute
'add-every-monday-morning': {
'task': 'users.tasks.test_task',
'schedule': crontab(hour="*", minute="*"),
'args': (),
},
}
Upvotes: 1