Pythonic и эффективный способ определения нескольких регулярных выражений для использования во многих итерациях

В настоящее время я пишу сценарий Python для обработки около 10 000 входных документов. Основываясь на выводе сценария, я заметил, что первые 400+ документов обрабатываются очень быстро, а затем сценарий замедляется, хотя все входные документы имеют примерно одинаковый размер.

Я предполагаю, что это может быть связано с тем фактом, что большая часть обработки документов выполняется с помощью регулярных выражений, которые я не сохраняю как объекты регулярных выражений после их компиляции. Вместо этого я перекомпилирую регулярные выражения всякий раз, когда они мне нужны.

Так как мой сценарий имеет около 10 различных функций, каждая из которых использует около 10-20 различных шаблонов регулярных выражений, мне интересно, что было бы более эффективным способом в Python, чтобы избежать повторной компиляции шаблонов регулярных выражений снова и снова (в Perl I может просто включать модификатор //o).

Я предполагаю, что если я буду хранить объекты регулярных выражений в отдельных функциях, используя

pattern = re.compile()

, результирующий объект регулярных выражений не будет сохранен до следующего вызова функции для следующей итерации (каждая функция вызывается только один раз для каждого документа) .

Создание глобального списка предварительно скомпилированных регулярных выражений кажется непривлекательным вариантом, поскольку мне пришлось бы хранить список регулярных выражений в другом месте в моем коде, чем то, где они фактически используются.

Есть какие-нибудь советы, как с этим справиться аккуратно и эффективно?

7
задан shanethehat 28 March 2012 в 19:54
поделиться