AngelLiang / celery-sqlalchemy-scheduler

A Scheduler Based SQLalchemy for Celery.
MIT License
125 stars 62 forks source link

celery-sqlalchemy-scheduler not working with ver 5.0.1 of Celery #25

Closed slakey closed 3 years ago

slakey commented 3 years ago

Receiving the following error after upgrading to celery 5.0

File "/venv/lib/python3.7/site-packages/celery_sqlalchemy_scheduler/schedulers.py", line 11, in from celery.five import values, items ModuleNotFoundError: No module named 'celery.five'

Any help would be appreciated.

AngelLiang commented 3 years ago

Celery >5.0 may have modified some interfaces, so it can't run well.

you can downgrade celery < 5.0 and > 4.2.

I will release new version to support celery 5.0+.

sunhk25 commented 3 years ago

请问Celery >5.0版本能不能轻松实现定时任务的增删? 我用的是Flask+MongoDB,现在实现起来有点麻烦。

AngelLiang commented 3 years ago

@sunhk25 目前可能没法轻松实现。 由于Celery4和Celery4接口不兼容问题,需要改源码吧。 另外欢迎来PR。

P-T-I commented 3 years ago

First of all thank you for your work; great project. Just a question; when are you planning to release a new version that is compatible with celery 5.0+?

process0 commented 3 years ago

I believe these are the only changes needed



--- a/celery_sqlalchemy_scheduler/schedulers.py
+++ b/celery_sqlalchemy_scheduler/schedulers.py
@@ -8,11 +8,10 @@ import sqlalchemy
 from celery import current_app
 from celery import schedules
 from celery.beat import Scheduler, ScheduleEntry
-from celery.five import values, items
-from celery.utils.encoding import safe_str, safe_repr
 from celery.utils.log import get_logger
 from celery.utils.time import maybe_make_aware
 from kombu.utils.json import dumps, loads
+from kombu.utils.encoding import safe_repr, safe_str

 from .session import session_cleanup
 from .session import SessionManager
@@ -384,7 +383,7 @@ class DatabaseScheduler(Scheduler):

     def update_from_dict(self, mapping):
         s = {}
-        for name, entry_fields in items(mapping):
+        for name, entry_fields in mapping.items():
             # {'task': 'celery.backend_cleanup',
             #  'schedule': schedules.crontab('0', '4', '*'),
             #  'options': {'expires': 43200}}
@@ -439,7 +438,7 @@ class DatabaseScheduler(Scheduler):
                 self._heap_invalidated = True
             if logger.isEnabledFor(logging.DEBUG):
                 logger.debug('Current schedule:\n%s', '\n'.join(
-                    repr(entry) for entry in values(self._schedule)),
+                    repr(entry) for entry in self._schedule.values()),
                 )
         # logger.debug(self._schedule)
         return self._schedule
AngelLiang commented 3 years ago

@process0 Thank you very much! I released in v0.3.0, and it supports celery 5.