Сельдерей выполняет задачи последовательно, одну за другой.Python

Программы на Python
Ответить
Anonymous
 Сельдерей выполняет задачи последовательно, одну за другой.

Сообщение Anonymous »

У меня есть приложение Django, в котором есть большие задачи, связанные с вводом-выводом.
Я использую Celery для запуска этих задач в потоках и управляю ходом выполнения в пользовательском интерфейсе с помощью индикатора выполнения.
Вот моя конфигурация:
Версия Django: 5.0.2
Версия с сельдереем: 5.3.6
Версия Redis: Redis для Windows 5.0.14.1 (https://github.com/tporadowski/redis/releases)СЕРВЕР
Windows Server 2016 (не могу это изменить; у меня есть данные, хранящиеся в Access База данных)
Размещение приложения в пуле приложений IIS по умолчанию
Процессор: 4 ядра
ОЗУ : 4 ГБ
Конфигурация web.config: Конфигурация Django wsgi:

Код: Выделить всё

from gevent import monkey
monkey.patch_all()
import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'WEBAPPLIAL.settings')

application = get_wsgi_application()
Конфигурация сельдерея Django:

Код: Выделить всё

#Celery setting
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'

CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_TASK_ALWAYS_EAGER = False
CELERY_TASK_TRACK_STARTED = True
Командная строка celery запущена в git:

Код: Выделить всё

$ celery -A WEBAPPLIAL worker -l info -P gevent
*** что делает командная строка сельдерея: ***

Код: Выделить всё

-------------- celery@WIN-RHK2AHPNGJ1 v5.3.6 (emerald-rush)
--- ***** -----
-- ******* ---- Windows-10-10.0.14393-SP0 2024-05-17 12:05:49
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         WEBAPPLIAL:0x17207492650
- ** ---------- .> transport:   redis://127.0.0.1:6379/0
- ** ---------- .> results:
- *** --- * --- .> concurrency: 4 (gevent)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery           exchange=celery(direct) key=celery

[tasks]
. APPLICATION.A13.A13_LOG_0002.model.task.extract_data
. APPLICATION.A13.A13_LOG_0005.tasks.launch_app
.  WEBAPPLIAL.celery.debug_task

[2024-05-17 12:05:49,995: WARNING/MainProcess] C:\Python311\Lib\site-packages\celery\worker\consumer\consumer.py:507: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine
whether broker connection retries are made during startup in Celery 6.0 and above.
If you wish to retain the existing behavior for retrying connections on startup,
you should set broker_connection_retry_on_startup to True.
warnings.warn(

[2024-05-17 12:05:50,010: INFO/MainProcess] Connected to redis://127.0.0.1:6379/0
[2024-05-17 12:05:50,010: WARNING/MainProcess] C:\Python311\Lib\site-packages\celery\worker\consumer\consumer.py:507: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine
whether broker connection retries are made during startup in Celery 6.0 and above.
If you wish to retain the existing behavior for retrying connections on startup,
you should set broker_connection_retry_on_startup to True.
warnings.warn(

[2024-05-17 12:05:50,026: INFO/MainProcess] mingle: searching for neighbors
[2024-05-17 12:05:51,048: INFO/MainProcess] mingle: all alone
[2024-05-17 12:05:51,048: WARNING/MainProcess] C:\Python311\Lib\site-packages\celery\worker\consumer\consumer.py:507: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine
whether broker connection retries are made during startup in Celery 6.0 and above.
If you wish to retain the existing behavior for retrying connections on startup,
you should set broker_connection_retry_on_startup to True.
warnings.warn(

[2024-05-17 12:05:51,048: INFO/MainProcess] pidbox: Connected to redis://127.0.0.1:6379/0.
[2024-05-17 12:05:51,063: INFO/MainProcess] celery@WIN-RHK2AHPNGJ1 ready.
Быстрый просмотр моей функции:

Код: Выделить всё

@shared_task(bind=True)
def launch_app(self, laiteries, formated_date):

@shared_task(bind=True)
def extract_data(self, date_start, date_end):
Они обе вызываются с помощью .delay()
Каждая функция взаимодействует с ORM Django, но по разной модели.
< hr />
Фактическое поведение
Затем, когда я запускаю свою первую функцию (путем взаимодействия с веб-приложением) и сразу запускаю вторая функция, происходит вот что:

Код: Выделить всё

[2024-05-17 12:06:28,464: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0002.model.task.extract_data[baf19fc9-dd9c-4574-af8d-c7ed9a522c0e] received
[2024-05-17 12:06:56,144: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0002.model.task.extract_data[baf19fc9-dd9c-4574-af8d-c7ed9a522c0e] succeeded in 27.60899999999998s: 'Proc▒dure termin▒e !'
[2024-05-17 12:06:56,159: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0005.tasks.launch_app[435df153-9879-47a4-93ba-5ba9ed90cf76] received
[2024-05-17 12:07:01,662: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0005.tasks.launch_app[435df153-9879-47a4-93ba-5ba9ed90cf76] succeeded in 5.5s: 'Tout les emails ont bien ▒t▒ envoyer !'
Проблемы:
Проблема в том, что Celery выполняет задачи последовательно, а не параллельно.Мое ожидаемое поведение будет примерно таким:

Код: Выделить всё

[2024-05-17 12:06:28,464: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0002.model.task.extract_data[baf19fc9-dd9c-4574-af8d-c7ed9a522c0e] received
[2024-05-17 12:06:29,159: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0005.tasks.launch_app[435df153-9879-47a4-93ba-5ba9ed90cf76] received
[2024-05-17 12:07:34,662: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0005.tasks.launch_app[435df153-9879-47a4-93ba-5ba9ed90cf76] succeeded in 5.5s: 'Tout les emails ont bien ▒t▒ envoyer  !'
[2024-05-17 12:06:56,144: INFO/MainProcess] Task APPLICATION.A13.A13_LOG_0002.model.task.extract_data[baf19fc9-dd9c-4574-af8d-c7ed9a522c0e] succeeded in 27.60899999999998s: 'Proc▒dure termin▒e !'
Если вам нужна дополнительная информация, спрашивайте!

Подробнее здесь: https://stackoverflow.com/questions/784 ... er-another
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»