Поток Python3.7 использует 100% CPU и вызывает зависание процесса. Как этого избежать? - PullRequest
0 голосов
/ 05 июля 2018

Я запускаю скрипт 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)
...