сбой задачи celery при обнаружении лица dlib cnn

#python #celery #dlib

#python #сельдерей #dlib

Вопрос:

У меня есть приложение flask со следующими расширениями:

 Python 3.7.2
Flask 1.0.2
Celery 4.3.0rc2
dlib 19.6
  

Без celery, как обычной однопоточной программы для распознавания лиц, все работает нормально, но когда я запускаю ее как задачу, возникает следующая ошибка:

Обработчик задачи выдал ошибку: WorkerLostError (‘Работник преждевременно завершен: сигнал 11 (SIGSEGV).’)

в этом фрагменте кода:

 dlib.cnn_face_detection_model_v1(model)
  

И я не понимаю, почему, но с этим:

 dlib.get_frontal_face_detector()
  

все работает отлично!

Я знаю конфликт, вызванный тем, что dlib (или BLAS ) не является потокобезопасным, но есть ли какой-либо способ отключить многопроцессорную обработку или заставить работников celery работать с этим?

UPD: у меня следующая структура проекта:

 ./app/face_detector.py
./tasks.py
  

В tasks.py я использую это поверх файла:

from app.face_detector import FaceDetector

трюк с импортом внутри задачи:

 @app.task
def foo():
    from app.face_detector import FaceDetector
  

Вообще не работает и выдает это:

модуль не назван…

Итак, решение из потока github не было понято мной или не работало

Комментарии:

1. У меня была похожая проблема, и я попытался импортировать ее встроенной в задачу, как было предложено в этом потоке, у меня это сработало

2. @Mntfr Я видел эту тему, но ничего не понял import theano (если вы это имели в виду), не могли бы вы объяснить более подробно? Я был бы признателен за ваш пример до / после даже

3. theano — это библиотека с глубоким обучением как dlib, поэтому в нем говорится, что вы можете импортировать dlib … в подпроцесс и не импортировать в родительский модуль.