У меня есть 2 файла, а именно. logi c .py и app.py В файле logi c имеются различные функции, а файл приложения представляет собой файл flask. В файле app.py я пишу несколько вещей, чтобы настроить работу сельдерея так, чтобы он планировал задачи на определенный промежуток времени. мой лог c .py выглядит примерно так:
#import statements
class xyz:
@celery.task(name='scheduler',once={'graceful':True})
def scheduler(self)
#rest of the code
@celery.task(name='scheduler2',once={'graceful':True})
def scheduler2(self):
#rest of the code
и мой app.py
from flask import Flask
from celery import Celery
from celery.schedules import crontab
from celery.utils.log import get_task_logger
app = Flask(__name__)
logger = get_task_logger(__name__)
def make_celery(app):
#Celery configuration
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
app.config['CELERY_TASK_SERIALIZER'] = 'json'
app.config['CELERY_RESULT_SERIALIZER'] = 'json'
app.config['CELERY_ACCEPT_CONTENT'] = ['json','yaml','msgpack']
app.config['CELERY_TASK_RESULT_EXPIRES'] = 30
app.config['CELERY_TIMEZONE'] = 'Asia/Calcutta'
app.config['CELERY_TASK_ACKS_LATE'] = True
app.config['CELERY_WORKER_PREFETCH_MULTIPLIER'] = 1
app.config['CELERYBEAT_SCHEDULE'] = {
# Executes every 5 minutes
'scheduler-every-minute': {
'task': 'scheduler',
'schedule': crontab('*/5'),
'args': ({ },)
},
'scheduler2-every-thursday': {
'task': 'scheduler2',
'schedule': crontab(day_of_week='Thursday',hour=12,minute=40),
'args': ({ }, )
},
}
celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True
def __call__(self, *args, **kwargs):
with app.app_context():
return TaskBase.__call__(self, *args, **kwargs)
celery.Task = ContextTask
return celery
celery = make_celery(app)
Меня больше волнует вопрос, почему при запуске сельдерея и работника он выполняется только одна задача. Я хотел запустить обе эти задачи параллельно на моей машине, но только первая задача выполняется. Может кто-нибудь помочь мне, где я иду не так?