Задать вопрос
levdneko
@levdneko
Просто я

Как выделить работе функции определенное время?

Есть функция

def search_pic(name_pic):
    p_tf3 = False
    while (p_tf3 == False):
        print("!")
        if pyautogui.locateOnScreen(name_pic, confidence=0.95) is not None:
            print("найдена картинка")
            x1, y1 = pyautogui.locateCenterOnScreen(name_pic)
            pyautogui.moveTo(x1, y1, 2)
            pyautogui.click(x1, y1)
            p_tf3 = True


Ищет фрагмент, но нужно чтоб она искала не более 20 сек. т.е. sleep не подходит прога тупо спит, отсрочка threading тоже не подходит. Если время прошло отказываемся это идеи поиска фрагмента )))
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
levdneko
@levdneko Автор вопроса
Просто я
во общем я сделал так
p_tf3 = False
t = 0
while (p_tf3 == False):
time.sleep(0.5)
t += 1
if pyautogui.locateOnScreen("картинка", confidence=0.95) is not None:
print("найдена картинка")
x1, y1 = pyautogui.locateCenterOnScreen(name_pic)
pyautogui.moveTo(x1, y1, 2)
pyautogui.click(x1, y1)
p_tf3 = True
if t == 42:
p_tf4 = True
Получилось что бесконечный while будет исполняться максимально 21 секунду с шагом в 0,5 сек. или закрываться когда условие выполнено.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Перед циклом сохраняем текущее время и на каждой итерации сравниваем текущее время с сохранённым, если разница больше 20 секунд, выходим из цикла.
Ответ написан
Комментировать
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
sleep по секунде и 20 циклов.
Ответ написан
@EugeneVKruglov
Запустить второй процесс, где по таймеру через 20 секунд устанавливать переменную, например, в True. В цикле функции проверять этот флаг. Если этот флаг равен True, прекращать работу функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы