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