import concurrent.futures from fnmatch import fnmatch import random import string def str_generator(size=10, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) def foo(strs, ref): for s in strs: fnmatch(ref, s) some_strings = [str_generator() for _ in range(500)] with concurrent.futures.ThreadPoolExecutor() as executor: futures = [executor.submit(foo, some_strings, some_strings[0]) for _ in range(8)] for f in futures: f.result()