#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 … в подпроцесс и не импортировать в родительский модуль.