В моем коде многопроцессорный процесс используется для одновременного создания нескольких заданий impdp (импорта), и каждое задание создает файл журнала с динамическим именем:
'/DP_IMP_' + DP_PDB_FULL_NAME[i] + '' + DP_WORKLOAD + '' + str(vardate) + '.log'
vardate = datetime.now().strftime("%d-%b-%Y-%I_%M_%S_%p")
tempfiles = []
for i in range((len(DP_PDB_FULL_NAME))):
for DP_WORKLOAD in DP_WORKLOAD_NAME:
tempfiles.append(logdir + '/DP_IMP_' + DP_PDB_FULL_NAME[i] + '_' + DP_WORKLOAD + '_' + str(vardate) + '.log')
p1 = multiprocessing.Process(target=imp_workload, args=(DP_WORKLOAD, DP_DURATION_SECONDS, vardate, ))
p1.start()
Я хочу объединить все файлы журналов, созданные в один большой основной файл журнала, после завершения всех процессов. Но когда я пытаюсь использовать что-то подобное в цикле (for i in range((len(DP_PDB_FULL_NAME))):
with open('DATAPUMP_IMP_' + str(vardate) + '.log','wb') as wfd:
for f in tempfiles:
with open(f,'rb') as fd:
shutil.copyfileobj(fd, wfd)
затем он пытается записать файлы до завершения процессов.
Здесь DP_PDB_FULL_NAME — это список нескольких баз данных, поэтому несколько процессов порождаются одновременно в нескольких БД. Когда я пытаюсь добавить p1.join()
после завершения цикла, многопроцессорность не происходит в нескольких БД.
Итак, как мне создать основной файл журнала после завершения всех отдельных процессов?