Код
def search(self, arg1, arg2):
global ipv4_regex, type_regex
if isinstance(arg2, type_regex):
text = re.search(arg2, arg1)
if text:
p = text.group()
return len(p)
else:
return 0
else:
if arg2 in arg1:
return len(arg2)
else:
return 0
У меня есть скрипт на python, в котором для обслуживания одного запроса эта функция пересчитывается примерно 452900 раз (для определения этого значения используется профилирование кода с использованием pprofile), чтобы выдать вывод.
Некоторые замечания по поводу функции:
arg1 = string
arg2 = ith string/regex
По сути, arg2
- это экземпляр ith
длинного списка регулярных выражений / строк, который необходимо сопоставить с порядком arg1
(arg1 остается неизменным для одного запроса), чтобы найти подходящую длину.
Я придумал эту функцию, но время и загрузка процессора становятся для меня узким местом. Из-за множества поисковых операций, ЦП очень скоро поднимется.
Какие идеи я думал до сих пор
- Используйте словарное понимание вместо
if-else
как предложено здесь
- Используйте какой-нибудь древовидный поиск, как мы делаем для строк.
обе эти идеи на данный момент являются простыми, я не могу воплотить их в жизнь.
У меня нет контроля над регулярными выражениями в arg2, поэтому оптимизация регулярных выражений здесь не поможет.
Пожалуйста, предложите, я ищу идеи о том, как я могу оптимизировать эту функцию?
Спасибо