Как задать ограничение на время выполнения куска кода?
В моем коде может случится такое, что строчка будет выполняться непростительно долго.
Нужно организовать принцип, по которому в случае, если она будет обрабатываться дольше, например 1 секунды, то ее выполнение будет прекращено.
Хотел решить с помощью многопоточности, но так как я не шарю у меня не получилось.
После использовал фишки Unix систем, а именно signal, но во-1 ошибка возникает в другом месте, а во-2 это решение не может использоваться на винде.
Покажите пожалуйста пример кода в котором описан изложенный выше принцип с использованием потоков по средствам multiprocessing или threading, буду очень благодарен
Нужно обязательно установить у потока daemon=True, иначе программа будет дожидаться его завершения
import time
import threading
import random
def longworker():
t = random.randint(10,20)
time.sleep(t)
print('воркер работал {} секунд'.format(t))
w = threading.Thread(target=longworker, daemon=True)
w.start()
w.join(timeout=15)
if w.isAlive():
print('Завершаем работу не дождавшись воркера')
exit()
Можно передать потоку обьект и сохранить результат там, но проще воркеру самому сохранять результат куда нужно используя локеры (если несколько потоков и один например файл)
def longworker(result):
t = random.randint(10,20)
time.sleep(t)
print('воркер работал {} секунд'.format(t))
result.append('результат')
result=[]
w = threading.Thread(target=longworker,args=(result,), daemon=True)
w.start()
w.join(timeout=15)
if w.isAlive():
print('Завершаем работу не дождавшись воркера')
exit()
print(result)