I am developing a small Python program that simulates pressing, holding, and releasing keys with random delays. This is intended to make the process look more natural, as if a real person is typing rather than a machine.
However, I encountered a significant problem: the total execution time of the program is 293.97 ms, which is approximately three times longer than the sum of the delays for key press (49 ms) and key release (42 ms), totaling 91 ms.
import time
import random
import pyautogui
def key_sim(key, min_delay_ms, max_delay_ms):
# Start time before keyDown
start_time = time.perf_counter()
pyautogui.keyDown(key)
delay_ms = random_delay(min_delay_ms, max_delay_ms)
time.sleep(delay_ms)
pyautogui.keyUp(key)
delay_ms = random_delay(min_delay_ms, max_delay_ms)
time.sleep(delay_ms)
# End time after keyUp
end_time = time.perf_counter()
return end_time - start_time
def random_delay(min_delay_ms, max_delay_ms):
delay_ms = random.randint(min_delay_ms, max_delay_ms)
delay_s = delay_ms / 1000.0 # Convert milliseconds to seconds
print(f"Delay: {delay_ms} ms")
return delay_s
# Execution
last_time = time.perf_counter()
execution_time = key_sim('a', 30, 60)
print("Total execution time: {:.2f} ms".format(execution_time*1000))
resultant of code:
..\main.py
Delay: 49 ms
Delay: 42 ms
Total execution time: 293.97 ms
Process finished with exit code 0
how to optimize code to minimize difference between sum of two delay and Total execution time?
Thank you in advance for your reply!
pyautogui.keyUp(key)andpyautogui.keyDown(key)the timings more or less match up; also note that perf_counter counts system time too, point is, pyautogui is adding to your time, just decrease the delays like mentioned above