Celery beat with django

111 Views Asked by At

I have this code to run my django celery first here the settings.py file under app.app.settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'debug_toolbar',
    'django_filters',
    'django_extensions',
    'corsheaders',
    'rest_framework',
    'auditlog',
    'simple_history',
    'drf_spectacular',
    'django_celery_beat',
    'logging',
    'core',
    'user',
    'company',
    'erp',
    'treasury',
]

CELERY_BROKER_URL = config('CELERY_BROKER_URL')
CELERY_BROKER_BACKEND = "db+sqlite:///celery.sqlite"
CELERY_CACHE_BACKEND = "db+sqlite:///celery.sqlite"
CELERY_RESULT_BACKEND = "db+sqlite:///celery.sqlite"
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'

now here the app.app.celery.py file

import os

from celery import Celery
from celery.schedules import crontab

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")
app = Celery("app")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()

app.conf.beat_schedule = {
    'generate_recurring_sale_documents_task': {
        'task': 'erp.sale_document.tasks.generate_recurring_sale_documents_task',
        'schedule': crontab(hour='11', minute='18'),
        'args': ('celer_beat_security_key_to_access_to_tasks',)
    },
}

and under app.erp.sale_document.tasks.py file I have this code

import logging

from celery import shared_task

from .service import generate_recurring_sale_documents

logger = logging.getLogger(__name__)


@shared_task
def generate_recurring_sale_documents_task(secret_key=None):
    # if secret_key != 'celer_beat_security_key_to_access_to_tasks':
    #     logger.error("Unauthorized access attempt to generate_recurring_sale_documents_task")
    #     return

    generate_recurring_sale_documents()

I run my celery worker and celeyr beat like this

python -m celery -A app.celery worker -l info -E --pool=gevent


python -m celery -A app.celery beat -l debug  

here some logs for celery beat

__    -    ... __   -        _
LocalTime -> 2023-08-07 11:22:08
Configuration ->
    . broker -> amqp://bimauser:**@localhost:5672//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> django_celery_beat.schedulers.DatabaseScheduler

    . logfile -> [stderr]@%DEBUG
    . maxinterval -> 5.00 seconds (5s)
[2023-08-07 11:22:08,255: DEBUG/MainProcess] Setting default socket timeout to 30
[2023-08-07 11:22:08,255: INFO/MainProcess] beat: Starting...
[2023-08-07 11:22:08,273: DEBUG/MainProcess] DatabaseScheduler: initial read
[2023-08-07 11:22:08,273: DEBUG/MainProcess] Writing entries...
[2023-08-07 11:22:08,273: DEBUG/MainProcess] DatabaseScheduler: Fetching database schedule
[2023-08-07 11:22:08,350: DEBUG/MainProcess] Current schedule:
<ModelEntry: generate_recurring_sale_documents erp.sale_document.tasks.generate_recurring_sale_documents(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 43 10
         * *
          * (m/h/d/dM/MY), UTC>
        >
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4
         * *
          * (m/h/d/dM/MY), UTC>
        >
<ModelEntry: generate_recurring_sale_documents_task erp.sale_document.tasks.generate_recurring_sale_documents_task(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 18 11
         * *
          * (m/h/d/dM/MY), UTC>
        >
[2023-08-07 11:22:08,476: INFO/MainProcess] DatabaseScheduler: Schedule changed.
[2023-08-07 11:22:08,476: DEBUG/MainProcess] Writing entries...
[2023-08-07 11:22:08,476: DEBUG/MainProcess] DatabaseScheduler: Fetching database schedule
[2023-08-07 11:22:08,546: DEBUG/MainProcess] Current schedule:
<ModelEntry: generate_recurring_sale_documents erp.sale_document.tasks.generate_recurring_sale_documents(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 43 10
         * *
          * (m/h/d/dM/MY), UTC>
        >
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4
         * *
          * (m/h/d/dM/MY), UTC>
        >
<ModelEntry: generate_recurring_sale_documents_task erp.sale_document.tasks.generate_recurring_sale_documents_task(*['celer_beat_security_key_to_access_to_tasks'], **{}) <crontab: 18 11
         * *
          * (m/h/d/dM/MY), UTC>
        >
[2023-08-07 11:22:08,546: DEBUG/MainProcess] beat: Ticking with max interval->5.00 seconds
[2023-08-07 11:22:08,703: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.

(process:5424): GLib-GIO-WARNING **: 11:22:08.938: Unexpectedly, UWP app `Microsoft.ScreenSketch_11.2303.17.0_x64__8wekyb3d8bbwe' (AUMId `Microsoft.ScreenSketch_8wekyb3d8bbwe!App') supports 29 extensions but has no verbs
[2023-08-07 11:22:13,715: DEBUG/MainProcess] beat: Synchronizing schedule...
[2023-08-07 11:22:13,715: DEBUG/MainProcess] Writing entries...
[2023-08-07 11:22:13,759: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:18,813: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:23,871: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:28,929: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:33,979: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:39,028: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.
[2023-08-07 11:22:44,080: DEBUG/MainProcess] beat: Waking up in 5.00 seconds.

also I'm using RabbitMQ in a docker I have some tasks that using celery worker and they work fine (send email .. ). But when I try to use celery beat that does not work always log waking up in 5.00 seconds

what I'm missing or what i'm doing wrong ? Is there any alternative to do schulde operation with celery?

0

There are 0 best solutions below