0

I want to periodically run the code in django For this I downloaded Celery and tried to configure it

Added to 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',
    }
}

Created a celery.py file

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}')

Created a tasks.py file

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)

Launched everything in turn

python manage.py runserver
celery -A shop worker -l INFO
celery -A shop beat -l INFO

beat brought me

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)

But worker dumped the next one every 15 seconds

[2021-02-19 16:18:02,275: WARNING/SpawnPoolWorker-1]
c:usersadminappdatalocalprogramspythonpython37libsite-packagesceleryapptrace.py:617:
RuntimeWarning: Exception raised outside body: TypeError(‘ord()
expected string of length 1, but int found’): Traceback (most recent
call last): File
“c:usersadminappdatalocalprogramspythonpython37libsite-packagesceleryapptrace.py”,
line 400, in trace_task
request=task_request, File “c:usersadminappdatalocalprogramspythonpython37libsite-packagescelerybackendsbase.py”,
line 435, in store_result
request=request, **kwargs) File “c:usersadminappdatalocalprogramspythonpython37libsite-packagescelerybackendsbase.py”,
line 851, in _store_result
current_meta = self._get_task_meta_for(task_id) File “c:usersadminappdatalocalprogramspythonpython37libsite-packagescelerybackendsbase.py”,
line 869, in _get_task_meta_for
meta = self.get(self.get_key_for_task(task_id)) File “c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjango_celery_resultsbackendscache.py”,
line 19, in get
return self.cache_backend.get(key) File “c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsdb.py”,
line 51, in get
return self.get_many([key], version).get(key, default) File “c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsdb.py”,
line 59, in get_many
self.validate_key(key) File “c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsbase.py”,
line 249, in validate_key
for warning in memcache_key_warnings(key): File “c:usersadminappdatalocalprogramspythonpython37libsite-packagesdjangocorecachebackendsbase.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

I don’t understand what is the error and how to fix it?