Python уменьшает влияние импорта процессора

Контекст: я создаю проект tkinter, который включает в себя распознавание лиц. Так как import face_recognition, cv2занимает много времени, чтобы сделать его более удобным, это было помещено в поток (я знаю, что tkinter не любит потоки, но они очень полезны). Например

import tkinter
def thread_import ():
    global face_recognition, cv2
    import face_recognition, cv2
if __name__ == '__main__':
    threading.Thread (target = thread_import).start ()

У меня вопрос, есть ли способ снизить влияние импорта. Из-за того, что процессор тянет время процессора, мое окно tkinter может работать без ответа. Я не против, если это займет немного больше времени, но я действительно не хочу вдаваться во все файлы библиотеки, чтобы добавить time.sleep (x),

Спасибо заранее.

1 ответ

Большое спасибо @TerryJanReedy за его комментарий о GIL. Исходя из этого, я создал multiproccessing.Process объект и передал необходимые значения через multiprocessing.Manager объект. Пример реализации можно увидеть ниже:

import multiprocessing, time

def thread_manager (manager):
    import face_recognition, cv2
    while not manager ["closing"]:
        if manager ["com"] == 0: time.sleep (0.2)
        else:
            if manager ["com"] == 1: manager ["rtn"] = "Example return."
            manager ["com"] = 0

if __name__ == "__main__":
    manager = multiprocessing.Manager ().dict ({"com" : 0, "closing" : False, "rtn" : None})
    p = multiprocessing.Process (target = thread_manager, args = (manager,))
    p.start ()
    time.sleep (5)
    manager ["com"] = 1
    while manager ["rtn"] == None: time.sleep (0.2)
    print (manager ["rtn"])
    manager ["closing"] = True
Другие вопросы по тегам