Я использую многопроцессорность, чтобы разделить задачу на подпроцессы.Я создал общий словарь, настроив многопроцессорный менеджер для регистрации defaultdict (список).Подпроцессы обновляют этот словарь, используя значения для добавления, но словарь содержит только ключи, соответствующие значения отсутствуют.
from collections import defaultdict
from multiprocessing.managers import BaseManager, DictProxy
import multiprocessing as mp, io
class MyManager(BaseManager):
pass
def process_read(chunkStart, chunkSize, doc_cluster, f_path):
lock = mp.Lock()
with io.open(f_path) as f_handle:
f.seek(chunkStart)
lines = f.read(chunkSize).splitlines()
for line in lines:
f_name = line.rstrip()
key = some_processing()
lock.acquire()
try:
doc_cluster[key].append(f_name)
finally:
lock.release()
if __name__ == '__main__':
results = []
cores = mp.cpu_count()
pool = mp.Pool(cores)
fp = 'B:/FN/FN_test.txt'
MyManager.register('defaultdict', defaultdict, DictProxy)
mgr = MyManager()
mgr.start()
d_cluster = mgr.defaultdict(list)
for chunk_Start, chunk_Size in chunkify(fp):
results.append(pool.apply_async(process_read, args=(chunk_Start, chunk_Size, d_cluster, fp,)))
pool.close()
pool.join()
print d_cluster
Фактический результат:
{'cd': [], 'ab': [],' bc ': []}
Ожидаемый результат:
{' cd ': [f_name1, f_name2, f_name3],' ab ': [f_name5, f_name7],'bc': [f_name4, f_name6]}