Как мне периодически запускать код в django?

#python #django #celery

#python #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
 

бит привел меня

запускается celery beat v5.0.5 (singularity). __ — … __ — _ LocalTime -> 2021-02-18 20:31:57 Конфигурация -> . broker -> amqp:// гость:**@localhost:5672// . loader -> celery.loaders.app.AppLoader . scheduler -> celery.beat.PersistentScheduler . db -> celerybeat-расписание . файл журнала -> [stderr]@%INFO . maxinterval -> 5,00 минут (300 секунд) [2021-02-18 20:31:57,062: INFO /MainProcess] удар: Запуск… [2021-02-18 20:31:57,216: INFO/MainProcess] Планировщик: отправка соответствующей задачи каждые 15 секунд (offers.tasks.send_email)

Но рабочий сбрасывал следующий каждые 15 секунд

[2021-02-19 16:18:02,275: ПРЕДУПРЕЖДЕНИЕ/SpawnPoolWorker-1] c:usersadminappdatalocalprogramspythonpython37libsite-packagesceleryapptrace.py:617 : Предупреждение о времени выполнения: Исключение, вызванное вне тела: TypeError(‘ord() ожидаемая строка длиной 1, но найден int’): Трассировка (последний последний вызов): Файл «c:usersadminappdatalocalprogramspythonpython37libsite-packagesceleryapptrace.py «, строка 400, в запросе trace_task=task_request, Файл «c:usersadminappdatalocalprogramspythonpython37libsite-packagescelerybackendsbase.py «, строка 435, в файле store_result request=запрос, **kwargs) «c:usersadminappdatalocalprogramspythonpython37libsite-packagescelerybackendsbase.py «, строка 851, в файле _store_result current_meta = self._get_task_meta_for(task_id) «c:usersadminappdatalocalprogramspythonpython37libsite-packagescelerybackendsbase.py «, строка 869, в _get_task_meta_for meta = self.get(self.get_key_for_task(task_id)) Файл «c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjango_celery_resultsbackendscache.py» , строка 19, в get return self.Файл cache_backend.get(key) «c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsdb.py» , строка 51, в get возвращает self.get_many([ключ], версия).get(ключ, по умолчанию) Файл «c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsdb.py» , строка 59, в файле get_many self.validate_key(ключ) «c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsbase.py» , строка 249, в validate_keyдля предупреждения в memcache_key_warnings (ключ): File «c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsbase.py» , строка 287, в memcache_key_warnings, если ord(char) < 33 или ord(char) == 127: TypeError: ord() ожидаемая строка длиной 1, но найден int

Я не понимаю, в чем ошибка и как ее исправить?

Ответ №1:

@sortfact- Попробуйте следующее. Он имеет приятный интерфейс, к которому вы можете получить доступ через администратора, и имеет действительно потрясающую конфигурацию, которую вы можете использовать для настройки планировщика.

 https://django-celery-beat.readthedocs.io/en/latest/
 

Комментарии:

1. Я не понимаю, где и как я должен использовать этот код .