Дорогое задание - это внутренний цикл, который сканирует основную таблицу для каждой строки хоста. Поскольку python выполняет совместную многопоточность (вы можете искать «python GIL»), одновременно выполняется только один поток, поэтому несколько потоков не ускоряют связанную с процессором операцию. Вы можете создавать подпроцессы, но тогда вам придется взвесить стоимость передачи данных рабочим процессам по сравнению с приростом скорости.
Или оптимизируйте свой код. Вместо параллельной работы индексируйте мастер. Вы можете обменять дорогостоящее сканирование на 100000 записей для быстрого поиска в словаре.
Я позволил себе добавить в ваш код предложения with
, чтобы сохранить несколько строк, а также пропустил разрывы colA
и т. Д. (Используя именованные индексы), чтобы сохранить код небольшим.
import csv
# columns of interest
A, B, C, D, E, F = 0, 11, 12, 13, 14, 3
# read and index column F in master by (B,D) and (B,D,E), discarding
# duplicates for those keys
col_index = {}
with open('master.csv') as master:
next(master)
for row in csv.reader(master):
key = row[B], row[D]
if key not in col_index:
col_index[key] = row[F]
key = row[B], row[D], row[E]
if key not in col_index:
col_index[key] = row[F]
#read csv files
with open('host.csv') as f1, open('results.csv','w') as f3:
c1=csv.reader(f1)
c3=csv.writer(f3)
for row in c1:
if row[A] == "icmp":
indexer = (row[B], row[D])
else:
indexer = (row[B], row[D], row[E])
row.append(col_index.get(indexer, 'Not Match'))
c3.writerow(row)