Несколько задач, не выполняющихся с использованием сельдерея в python flask - PullRequest
0 голосов
/ 09 января 2020

У меня есть 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)

Меня больше волнует вопрос, почему при запуске сельдерея и работника он выполняется только одна задача. Я хотел запустить обе эти задачи параллельно на моей машине, но только первая задача выполняется. Может кто-нибудь помочь мне, где я иду не так?

...