Search code examples
pythondjango-celerycelery-taskcelerybeatperiodic-task

Periodic task is not working properly in django celery


Hello friends I need your help in periodic tasks for django application. I am trying to do periodic task using celery but it is not properly working. I have a simple task, in which there is only a print statement. Celery is working only for 1st time, and I also tried 'celery beat', but haven't got result

my "task.py" is

from __future__ import absolute_import
from myapp.celery import app
from celery.schedules import crontab
from celery.task import periodic_task
from celery.registry import tasks

@periodic_task(run_every=(crontab(minute='*/1')), name="some_task")
def every_minute(a,b):
    print("This is running after one minute",a+b)
    return "task done"
tasks.register(every_minute)

and "view.py"

from django.http import HttpResponse
from django.views.generic import View
from .tasks import *
from .models import *
from datetime import datetime, timedelta

class CeleryTest(View):
    def get(self,request):
        send_date = datetime.now() + timedelta(seconds=200)
        task=every_minute.apply_async([5,6],etc=send_date)
        while not task.ready():
            print "calling............task is not ready"
        return HttpResponse("hi get ur task")

I just added this schedule in earlier celery setting."setting.py"

CELERYBEAT_SCHEDULE = {

     'every_minute': {
         'task': 'every_minute.add',
         'schedule': crontab(minute='*/1'),
         'args': (5, 6),
     },
 }

Thank you friends for your time.


Solution

  • use your Schedule like this....

    CELERYBEAT_SCHEDULE = {
          'every_minute': {
            'task': 'every_minute',
          },
    }
    

    and run this command for celery

    python manage.py celeryd -BE -l info
    

    now my periodic tasks running fine.