Django-celery-beat: Not compatible with celery 5.0.0

Created on 25 Sep 2020  路  16Comments  路  Source: celery/django-celery-beat

Summary:

When go to admin periodictask page, these is an error.

  • Celery Version: 5.0.0
  • Celery-Beat Version: 2.0.0

Exact steps to reproduce the issue:

  1. Login to admin page
  2. Click Periodic tasks
  3. Boom

Detailed information

LOGS

Environment: Request Method: GET Request URL: http://localhost:8000/admin/django_celery_beat/periodictask/ Django Version: 3.1.1 Python Version: 3.8.5 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'user_sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'mptt', 'import_export', 'graphene_django', 'django_celery_beat', 'storage', 'board', 'xiaoai', 'iot', 'corsheaders'] Installed Middleware: ['corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'user_sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware'] Traceback (most recent call last): File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\contrib\admin\options.py", line 614, in wrapper return self.admin_site.admin_view(view)(*args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view response = view_func(request, *args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django\contrib\admin\sites.py", line 233, in inner return view(request, *args, **kwargs) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django_celery_beat\admin.py", line 156, in changelist_view extra_context['wrong_scheduler'] = not is_database_scheduler(scheduler) File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django_celery_beat\utils.py", line 42, in is_database_scheduler from .schedulers import DatabaseScheduler File "C:\Users\hmy01\Works\Working\smart-home\.venv\lib\site-packages\django_celery_beat\schedulers.py", line 11, in from celery.utils.encoding import safe_str, safe_repr Exception Type: ModuleNotFoundError at /admin/django_celery_beat/periodictask/ Exception Value: No module named 'celery.utils.encoding'

Most helpful comment

if you need a quick local fix, you can monkey patch it in a high level __init__ module:

import sys
from kombu.utils import encoding
sys.modules['celery.utils.encoding'] = encoding

All 16 comments

Same problem here

celery beat v5.0.0 (singularity) is starting.
Traceback (most recent call last):
  File "/home/teera/.pyenv/versions/3.8.4/bin/celery", line 8, in <module>
    sys.exit(main())
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/__main__.py", line 15, in main
    sys.exit(_main())
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/bin/celery.py", line 150, in main
    return celery(auto_envvar_prefix="CELERY")
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/bin/beat.py", line 70, in beat
    return beat().run()
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 77, in run
    self.start_scheduler()
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 96, in start_scheduler
    print(self.banner(service))
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 118, in banner
    c.reset(self.startup_info(service))),
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/apps/beat.py", line 128, in startup_info
    scheduler = service.get_scheduler(lazy=True)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/celery/beat.py", line 653, in get_scheduler
    return symbol_by_name(self.scheduler_cls, aliases=aliases)(
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/kombu/utils/imports.py", line 56, in symbol_by_name
    module = imp(module_name, package=package, **kwargs)
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/teera/.pyenv/versions/3.8.4/lib/python3.8/site-packages/django_celery_beat/schedulers.py", line 11, in <module>
    from celery.utils.encoding import safe_str, safe_repr
ModuleNotFoundError: No module named 'celery.utils.encoding'

https://github.com/celery/django-celery-beat/pull/365
https://github.com/celery/django-celery-beat/pull/363

Same issue when trying to set up: https://github.com/pydanny/cookiecutter-django

Getting the same error.

same error here.

fixed it by changing 'celery.utils.encoding' to 'kombu.utils.encoding'

if you need a quick local fix, you can monkey patch it in a high level __init__ module:

import sys
from kombu.utils import encoding
sys.modules['celery.utils.encoding'] = encoding

'celery.utils.encoding' to 'kombu.utils.encoding'

This one worked for me.

@tuky worked for me.

should be fixed on master now, please check and let us know

thx @auvipy. the from kombu.utils.encoding import safe_str, safe_repr import now made it into schedulers.py twice.

I'm getting the same error

    from celery.utils.encoding import safe_str, safe_repr
ModuleNotFoundError: No module named 'celery.utils.encoding'

When I run

celery -A proj beat -l INFO --scheduler django
celery -A proj beat -l INFO -S django

celery -A proj beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
celery -A proj beat -l INFO -S django_celery_beat.schedulers:DatabaseScheduler

But when I run

celery -A proj beat -l INFO

The result is

LocalTime -> 2020-10-15 22:16:10
Configuration ->
    . broker -> amqp://guest:**@localhost:5672//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%INFO
    . maxinterval -> 5.00 minutes (300s)
[2020-10-15 22:16:10,468: INFO/MainProcess] beat: Starting...

Even though I set the beat_scheduler setting with django_celery_beat.schedulers:DatabaseScheduler. The settings in _lowecase_ do not work by the way.

I have the same stack @he0119 has.

Commenting this out gives no error:
# CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

@auvipy This fix works for me. Are there any plans to release a new version on pypi which fix this bug?

v2.1.0 is now on pypi

v2.1.0 works with Celery v5.0.0 in my setup the issue is resolved and can be closed.

Also updated and the combo works fine.

Was this page helpful?
0 / 5 - 0 ratings