Я запускаю скрипт Python, который порождает потоки, в которых он анализирует текст с помощью сложных шаблонов регулярных выражений с использованием модуля re. В некоторых ситуациях, когда входная строка очень длинная, интерпретатор Python занимает до 100% ЦП моего компьютера t2.micro EC2 (1 виртуальный ЦП, 1 ГБ ОЗУ), и сценарий перестает работать (возможно, из-за недостатка ресурсов). ).
Я пытался найти способ убить поток после некоторого тайм-аута - но в моем случае невозможно проверить какой-либо флаг в цикле, так как поток никогда не выходит из функции регулярного выражения. Также крайне важно не убивать весь процесс - в идеале приложение должно работать 24/7.
Может быть, можно каким-то образом отслеживать ресурсы, занятые потоком, и вызывать какие-то исключения после указанного порога?
Очень, очень упрощенный пример моего скрипта - это код:
from concurrent.futures import ThreadPoolExecutor
import re
pool = ThreadPoolExecutor(max_workers)
def check_difficult_regex(pattern, string):
# time-consuming operations in here
pool.submit(check_difficult_regex, pattern, text)