Слишком сильная нагрузка программы
Всё время сталкиваюсь с излишней нагрузкой на прцессор при работе своего кода (как в виде кода так и в exe). Из идей только то что всё из-за бесконечного цикла и постоянной его обработки, пытался пофиксить ивентами но не вышло. Люди знающие, помогите, надо снизить нагрузку и оставить бесконечную работу. Код:
import keyboard
from time import sleep
import mouse
import json
with open("spammer_conf.json", encoding="utf8") as file:
data = json.load(file)
counter_1 = 0
counter_2 = 0
counter_3 = 0
spamstr = data["spamstr"]
emoji = data["emoji"]
button_spam_str = data["button_spam_str"]
button_spam_emoji = data["button_spam_emoji"]
clicker = data["clicker"]
clicker_timeout = data["clicker_timeout"]
button_clicker = data["button_clicker"]
reset = data["reset"]
print(f"Установленые бинды:\nReset: {reset}\nClicker: {clicker}\nСпам текста: {button_spam_str}\nСпам эмоджи: {button_spam_emoji} \nПриятного использования (version 1.2)")
while True:
e = keyboard.is_pressed(button_spam_emoji)
s = keyboard.is_pressed(button_spam_str)
c = keyboard.is_pressed(clicker)
r = keyboard.is_pressed(reset)
if e != False:
keyboard.write(f"{emoji}\n")
print(f"Спам эмоджи {emoji}: {counter_1 + 1}")
sleep(0.01)
counter_1 = counter_1 + 1
elif s != False:
keyboard.write(f"{spamstr}\n")
print(f"Спам строки: {counter_2}")
sleep(0.01)
counter_2 = counter_2 + 1
elif c != False:
mouse.click(button=button_clicker)
print(f"Спам кнопкой мыши {button_clicker}: {counter_3 + 1}")
sleep(0.01)
counter_3 = counter_3 + 1
elif r != False:
counter_1 = 0
counter_2 = 0
counter_3 = 0
print("Все счётчики сброшены")
sleep(2)
(Программированием увлёкся недавно, камнями прошу не кидаться)
Ответы (1 шт):
Похоже, Вы хотите как только пользователь нажал нужную кнопку, тут же отправить сообщения. Как можно быстрее и больше. Но вот беда, человек не машина и время реакции у него не нулевое. Большинство людей обычно могут среагировать на 0.3-0.4 секунды, а водители-профессионалы - до 0.25 (тут время реакции - это время между тем, как они увидели изменение ситуации и начали реагировать - крутить руль/жать педали).
Вывод, если сделать опрос раз в 0.1 секунды, 99% пользователей не увидит разницы с 0.01 секундой. Думаю, даже для 0.2 секунды разница будет практически не ощутимой.
Поэтому, выносим мелкие sleep с if и переносим их за их пределы.
while True:
e = keyboard.is_pressed(button_spam_emoji)
s = keyboard.is_pressed(button_spam_str)
c = keyboard.is_pressed(clicker)
r = keyboard.is_pressed(reset)
if e != False:
keyboard.write(f"{emoji}\n")
print(f"Спам эмоджи {emoji}: {counter_1 + 1}")
counter_1 = counter_1 + 1
elif s != False:
keyboard.write(f"{spamstr}\n")
print(f"Спам строки: {counter_2}")
counter_2 = counter_2 + 1
elif c != False:
mouse.click(button=button_clicker)
print(f"Спам кнопкой мыши {button_clicker}: {counter_3 + 1}")
counter_3 = counter_3 + 1
elif r != False:
counter_1 = 0
counter_2 = 0
counter_3 = 0
print("Все счётчики сброшены")
sleep(0.2)
нагрузка на процессор сильно уменьшиться. Но вот и слать теперь больше 5 элементов спама в секунду не получится. Может оно и к лучшему. Но если все таки хочется, то кто мешает сделать цикл?
Вместо
keyboard.write(f"{emoji}\n")
написать
for i in range(1,10): # 10000, если здоровье позволяет
keyboard.write(f"{emoji}\n")
если хочется, что бы скорость была повыше, в терминал лучше не писать - это очень затратная операция и может существенно увеличить время, когда за Вами приедут.