Как мне оптимизировать работу бесконечного цикла while?

У меня есть такой цикл(В функции, да):

def check_for_warface():
    found_warface = False

    while not found_warface:
        for proc in psutil.process_iter():
            if proc.name() == warface:
                found_warface = True
                find_and_terminate_procexp()
                warface_process = psutil.Process(proc.pid)
        time.sleep(1)

    warface_process.wait()
    start_procexp()
    check_for_warface()

Пока цикл while ведёт проверку, экзешник(Я конвертирую код в .exe и оставляю в автозагрузке для работы в фоне) потребляет вплоть до 15% процессора, и мне это не нравится, ибо последний у меня очень слабый. Как я могу оптимизировать его работу, снизить потребление процессора? Полный код скидываю чуть ниже:

import psutil
import os
import subprocess
import time

from psutil import Process

warface = "Game.exe"
ProcessExplorer = "procexp.exe"
icon = 'icon.ico'


def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)


def find_and_terminate_procexp():
    for proc in psutil.process_iter():
        if proc.name() == ProcessExplorer:
            for child in proc.children(recursive=True):
                child.terminate()
            proc.terminate()


def start_procexp():
    subprocess.Popen(r"C:\Program Files (x86)\ProcessExplorer\procexp.exe /t")


def check_for_warface():
    found_warface = False

    while not found_warface:
        for proc in psutil.process_iter():
            if proc.name() == warface:
                found_warface = True
                find_and_terminate_procexp()
                warface_process = psutil.Process(proc.pid)
        time.sleep(1)

    warface_process.wait()
    start_procexp()
    check_for_warface()


def main():
    check_for_warface()


if __name__ == '__main__':
    main()

У меня нет идей, как я мог бы оптимизировать его работу, к сожалению.


Ответы (1 шт):

Автор решения: Zailox

Есть только 2 варианта, либо ставить time.sleep() побольше, либо сделать детект вручную, (т.е. при нажатии сочетания клавиш, например: alt+f6) ещё пару вариантов: обновить ПК, либо попробовать перенести данную задачу на язык C#, т.к. на нем эту программу написать будет несложно, + в интернете ооооочень много исходников.

→ Ссылка