Как периодичиски запускать код в django?
Я хочу периодичиски запускать код в django
Для этого я скачал Celery и попытался настроить его
Добавил в settings.py
INSTALLED_APPS = [
'django_celery_results',
'django_celery_beat',
}
CELERY_TIMEZONE = "Australia/Tasmania"
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
CELERY_RESULT_BACKEND = 'django-db'
CELERY_RESULT_BACKEND = 'django-cache'
CELERY_CACHE_BACKEND = 'default'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
}
}
Создал файл celery.py
import os
from celery import Celery
name='shop'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', name+'.settings')
app = Celery(name)
app.config_from_object('django.conf:settings', namespace='CELERY')
app.conf.beat_schedule = {
'every-15-seconds':{
'task':'offers.tasks.send_email',
'schedule':15,
'args':('dsssew.com',)
}
}
app.conf.timezone = 'UTC'
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
Создал файл tasks.py
from __future__ import absolute_import, unicode_literals
from celery import shared_task
@shared_task
def send_email(email):
print(email)
@shared_task
def add(x, y):
return x + y
@shared_task
def mul(x, y):
return x * y
@shared_task
def xsum(numbers):
return sum(numbers)
Запустил все по очереди
python manage.py runserver
celery -A shop worker -l INFO
celery -A shop beat -l INFO
beat вывел мне
celery beat v5.0.5 (singularity) is starting. __ - ... __ - _ LocalTime -> 2021-02-18 20:31:57 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) [2021-02-18 20:31:57,062: INFO/MainProcess] beat: Starting... [2021-02-18 20:31:57,216: INFO/MainProcess] Scheduler: Sending due task every-15-seconds (offers.tasks.send_email)
Но worker вывел следующее каждые 15 секунд
File "c:\users\admin\appdata\local\programs\python\python37\lib\site-packages\django\core\cache\backends\base.py", line 287, in memcache_key_warnings if ord(char) < 33 or ord(char) == 127: TypeError: ord() expected string of length 1, but int found
Я не понимаю в чем ошибка и как это исправить?