Попытка перенести долгосрочную задачу из django в отдельный поток - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть приложение Django 2 с действием в администраторе, которое берет одно-много изображений и использует проект face_recognition для поиска лиц и сохранения информации о лицах в базе данных.Я хотел бы переложить это действие в другой поток.Тем не менее, в моей попытке начать новый поток приложение Django не возвращается, пока не будут завершены все потоки.Я думал, что если я поместу долгосрочную задачу в отдельный поток, то приложение Django вернется, и пользователь сможет делать с ним другие вещи, поскольку длительный процесс запускается в фоновом режиме.

Код действия DocumentAdmin:

def find_faces_4(self, request, queryset):
     from biometric_identification.threaded_tasks import map_thread_pool_face_finder
     images_to_scan = []
     for obj in queryset:
         # If the object is a Photo with one to many people, send to face recognition
         metadata = DocumentMetaData.objects.filter(document_id = obj.document_id)[0].metadata
         if "Photo Type" in metadata and metadata["Photo Type"] != 'No People':
                 images_to_scan.append(obj)
     map_thread_pool_face_finder(images_to_scan)

Код для поиска изображений:

def map_thread_pool_face_finder(document_list):
    t0 = timeit.default_timer()       
    pool = ThreadPool()
    pool.map(fftask2, document_list)
    pool.close()
    pool.join()  
    t1 = timeit.default_timer() 
    logger.debug("Function map_thread_pool_face_finder {} seconds".format(t1 - t0))

def fftask2(obj):
    find_faces_task(obj.document_id, obj.storage_file_name.name, settings.MEDIA_ROOT)

Функция find_faces_task выполняет фактическое сканирование изображений для лиц.

Я ожидал, что действие выдаст распознавание лиц отдельным нитям и вернется сразу же, пока изображения находятся в фоновом режиме.Распознавание лиц работает, но приложение Django заморожено, пока не будут найдены все изображения.Чего мне не хватает в моем понимании многопоточности или моего кода?

Спасибо!

Марк

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