Прервать процесс по таймауту в Python
Господа, подскажите пожалуйста есть ли в Python готовое решение (уверен что есть не могу найти) для такой задачи.
Нужно по таймауту кильнуть процесс. Тоесть должно работать как вот такой костыль:
import os
import signal
import time
from datetime import datetime
from multiprocessing import Process
def o(time_limit: int = 0):
start = datetime.now()
while (datetime.now() - start).seconds <= time_limit:
time.sleep(.1)
else:
os.kill(os.getppid(), signal.SIGTERM)
print(f'\n{datetime.now() - start}')
def main():
start = datetime.now()
while (datetime.now() - start).seconds < 30:
print(f'\r{(datetime.now() - start).seconds}', end='')
time.sleep(1)
return True
if __name__ == '__main__':
main_start = datetime.now()
print(os.getpid())
p = Process(target=o, args=(20,))
p.start()
if main():
p.kill()
else:
p.join()
print()
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Каноничное решение это прерывание на SIGALARM. Но оно не работает с асинхронным кодом.
Можно так, чтоб не засорять блокировками маин
def timeout(p, t):
p.join(t)
p.kill()
p.join()
p = Process(target=o, args=(20,))
Thread(target=timeout, args=(p, 30)).start()