Сельдерей преждевременно выходил из дома во время подзаговора Matplotlib () - PullRequest
0 голосов
/ 04 сентября 2018

Я использую Celery с результатами django и django-celery-beat / django-celery-.

Сельдерей работает нормально до тех пор, пока не достигнет следующего кода:
figure, ax = plt.subplots(figsize=(15,3))
Затем он завершается со ссылкой signal 11:

[2018-09-04 19:43:21,928: ERROR/MainProcess] Process 'ForkPoolWorker-1' pid:42611 exited with 'signal 11 (SIGSEGV)'
[2018-09-04 19:43:21,962: ERROR/MainProcess] Task handler raised error: WorkerLostError('Worker exited prematurely: signal 11 (SIGSEGV).',)
Traceback (most recent call last):
  File "/Users/user/.local/share/virtualenvs/venv/lib/python3.6/site-packages/billiard/pool.py", line 1223, in mark_as_worker_lost
    human_status(exitcode)),
billiard.exceptions.WorkerLostError: Worker exited prematurely: signal 11 (SIGSEGV).

Знаете, что может происходить?

Настройки сельдерея:

CACHE_LOCATION = "redis://%s:6379" % REDIS_HOST

CELERY_BROKER_URL = CACHE_LOCATION
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

версия:
бильярд == 3.5.0.4 сельдерей == 4.1.0

1 Ответ

0 голосов
/ 23 июля 2019

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

Если вы, как и я, имеете долгосрочную работу с сельдереем, которая вычисляет некоторые значения, которые вы хотите отобразить в файле статического изображения , тогда мой ответ должен сработать.

В основном проблема связана с бэкэндами matplotlib. Как вы можете видеть в документации https://matplotlib.org/faq/usage_faq.html#what-is-a-backend,, вы можете выбрать серверную часть, которая будет отображать графики. И у вас есть интерактивные и неинтерактивные бэкэнды. Если, как и я, вы хотите только строить графики и сохранять их в статических файлах, вам не нужен стандартный интерактивный бэкэнд.

По какой-то неизвестной причине бэкэнд по умолчанию не работает на сельдерее и поднимает SIGSEGV , и, таким образом, мне помогло указать другой бэкэнд во время импорта:

import matplotlib
matplotlib.use("Agg")

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...