for chunk in file.stream(chunk_size):
    for result in finditer(match, overlap_tail + chunk):
        if not chunk_start + result.start() in matched:
            yield result
matched[chunk_start + result.start()] = result
findall/finditer на потоке?