Какие улучшения можно внести в этот код?

Как изменить данный код таким образом, чтобы при нажатии клавиши "Пробел" клики по всем заданным координатам выполнялись одновременно, а не поочередно, чтобы сократить время выполнения кода при нажатии клавиши "Пробел"?
  • 8 июля 2024 г. 15:42
Ответы на вопрос 3
Для улучшения этого кода можно использовать более эффективный способ с помощью библиотеки PyAutoGUI. 

Для изменения кода таким образом, чтобы все клики по заданным координатам выполнялись одновременно при нажатии клавиши "Пробел", можно использовать многопоточность. Ниже приведен пример кода с использованием библиотеки threading:

```python
import pyautogui
import keyboard
import threading

# Заданные координаты
coordinates = [(100, 100), (200, 200), (300, 300)]

# Функция для выполнения клика по координатам
def click_coordinate(coord):
    pyautogui.click(coord[0], coord[1])

# Функция, которая будет вызываться при нажатии клавиши "Пробел"
def on_space_pressed():
    threads = []
    for coord in coordinates:
        thread = threading.Thread(target=click_coordinate, args=(coord,))
        threads.append(thread)
        thread.start()
    
    for thread in threads:
        thread.join()

keyboard.add_hotkey('space', on_space_pressed)

keyboard.wait('esc')
```

Этот код создает отдельный поток для каждой координаты, что позволяет выполнять все клики одновременно. Важно помнить, что использование многопоточности может иметь ограничения в зависимости от железа и операционной системы, поэтому рекомендуется тестировать код на конкретной конфигурации перед применением в продакшене.
Использовать не pyauto, а что то другое и более низкоуровневое. Например винапи. Если и там не получится - прикидываться тачскрином с мультитачем. В общем задача нетривиальная и небесплатная
Эксперементируйте с паузой , чтобы добиться максимально быстрых кликов: 
import keyboard as kb
import pyautogui as pt

pt.PAUSE = 0.01

if __name__ == '__main__':
    coordinates = [
        (-1241, 624),
        (-303, 720),
        (604, 634),
        (1363, 679),
        (1363, 679),
        (2265, 654),
        (558, 1342),
        (2476, 1255),
    ]

    while True:
        if kb.is_pressed('Space'):
            for x, y in coordinates:
                pt.click(x, y)
Похожие вопросы