Другое потенциальное решение (вероятно, медленнее, чем у ForceBru, но эй, это было забавно - кодировать XD) - это использовать потоки для резкого сокращения времени:
from queue import Queue
from threading import Thread
q = Queue()
number_of_threads = 3
def get_customer_id():
while True:
customer_name = q.get()
with open('Master.txt', 'r') as f:
for line in f.readlines():
if customer_name.strip() in line:
print(line.strip())
break
q.task_done()
with open('Slave.txt', 'r') as f:
for line in f.readlines():
q.put(line)
for i in range(number_of_threads):
new_thread = Thread(target=get_customer_id)
new_thread.setDaemon(True)
new_thread.start()
print('main thread waiting')
q.join()
print('done')
Вы можете увеличить количество потоков, скажем до 100-200 может быть и пусть они проворачиваются!Это будет очень дорогостоящим в вычислительном отношении, хотя, поскольку у вас есть максимальное количество итераций почти 125 000 000 000 000 в худшем случае.Это довольно преувеличено, потому что оператор break
должен сократить значительное количество этих итераций.И если он работает в 100 потоках, то вы можете разделить число на 100 после того, как уже уменьшите его до break
(при условии, что вы еще не максимально используете процессор, в этом случае многопроцессорность будет лучше).Тем не менее, несмотря на то, что LOOOOTS вычислений с этим методом.
Это, по сути, делает то же самое, что и ваш первоначальный скрипт, но выполняет его во много раз быстрее, разделяя и завоевывая!