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

Я еще новичок, так что приму критику. Переменные x, x1, y, y1 это координаты положения курсора мыши. Я сравниваю их для определения движения мыши. Я думаю что сильно нагружает именно цикл while, но я не знаю как от него избавится. Сравнение координат должно происходить только при зажатой клавише "CTRL". вот мой код:

import pyperclip
import pyautogui as pg
import time
import keyboard as kb
from googletrans import Translator

def copy_clipboard():
    pg.hotkey('CTRL', 'C')
    time.sleep(0.5)  # ctrl-c is usually very fast but your program may execute faster
    return pyperclip.paste()

def translate():
    time.sleep(3)
    translator = Translator()
    con = copy_clipboard()
    result = translator.translate(str(con), src='ru', dest='en')
    cont = result.text
    print(cont)
    pyperclip.copy(cont)

while True:
    a = 1
    x, y = 0, 0
    while kb.is_pressed('CTRL'):
        if a == 1:
            a = 0
            continue
        x1, y1 = x, y
        x, y = pg.position()
        if x != x1 or y != y1:
            if abs(x-x1) >= 100:
                if x-x1 > 0:
                    if x != 0 and x1 != 0:
                        translate()
                else:
                    if x != 0 and x1 != 0:
                        print('Движение влево')
                        print(x, x1)
            elif abs(y-y1) >= 100:
                if y-y1 > 0:
                    if y != 0 and y1 != 0:
                        print('Движение вниз')
                        print(y, y1)
                else:
                    if y != 0 and y1 != 0:
                        print('Движение вверх')
                        print(y, y1)
        time.sleep(1)


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

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

time.sleep всегда ставить в начало цикла на случай попадания continue(полагаю в этом и проблемма), во втором цикле так же исспользовать sleep, значения которого должны быть 0.1 тк одна секунда слишком большое время. Изменить подход- исспользовать модуль pynput, который будет вызывать функцию при нажатии и отпускании клавиш, а не впадать в цикл. То есть цикл не нужен, нужно вызывать функцию при нажатии контрл, которая сохраняет координаты; нужно вызывать вторую функцию при отпускании контрл которая и выполнит основную задачу.

→ Ссылка