Там строка 1 Gigabyte произвольных данных, которую вы можете считать эквивалентной чему-то вроде:
1_gb_string=os.urandom(1*gigabyte)
Мы будем искать эту строку 1_gb_string
для бесконечного числа фиксированной ширины, 1 килобайт шаблонов, 1_kb_pattern
. Каждый раз, когда мы ищем шаблон, будет отличаться. Таким образом, возможности кэширования не очевидны. Одну и ту же строку 1 гигабайт будут искать снова и снова. Вот простой генератор, чтобы описать, что происходит:
def findit(1_gb_string):
1_kb_pattern=get_next_pattern()
yield 1_gb_string.find(1_kb_pattern)
Обратите внимание, что нужно найти только первое вхождение шаблона. После этого никакая другая важная обработка не должна выполняться.
Что я могу использовать быстрее, чем python bultin find для сопоставления шаблонов 1KB с 1 или более строками данных?
(Я уже знаю, как разделить строку и искать ее параллельно, поэтому вы можете игнорировать эту базовую оптимизацию.)
Обновление: Пожалуйста, привязаны требования к памяти до 16 ГБ.