Python уменьшает влияние импорта процессора - PullRequest
0 голосов
/ 09 сентября 2018

Контекст: я создаю проект 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 Ответ

0 голосов
/ 10 сентября 2018

Большое спасибо @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
...