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).

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

Я не понимаю последнее предложение. Основываясь на том, что я понимаю, считать, я бы попытался разделить оператор импорта на 2 оператора импорта.

Terry Jan Reedy 09.09.2018 19:04

Если ваше приложение выполняет другие функции, кроме распознавания лиц, вы можете отложить импорт до тех пор, пока не будет запрошено распознавание лиц.

Terry Jan Reedy 09.09.2018 19:06

Я имел в виду перейти в файл __init__ для open-cv и распознавания лиц, а затем сделать, как вы предложили, с time.sleep между каждым импортом (а затем, возможно, для каждого файла, вызываемого оттуда).

Minion Jim 09.09.2018 19:07

Я мог бы отложить импорт, но это намного удобнее, если им не нужно этого ждать (поэтому я не импортировал его при первой загрузке программы)

Minion Jim 09.09.2018 19:09

Если face_recognition написан на C, вероятно, следует выпустить GIL, чтобы разрешить выполнение основного потока. Этот комментарий находится на грани моих знаний, поэтому я не могу сказать больше, кроме как поискать в теге python GIL и, возможно, попросить помощи по python-list.

Terry Jan Reedy 10.09.2018 17:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
65
1

Ответы 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

Другие вопросы по теме