Идея состоит в том, чтобы написать N
файлы с использованием N
процессов.порождать несколько процессов для записи разных файлов Python
Данные для файла, который будет написано приходят из нескольких файлов, которые хранятся на словарь, который имеет список в качестве значения, и это выглядит следующим образом:
dic = {'file1':['data11.txt', 'data12.txt', ..., 'data1M.txt'],
'file2':['data21.txt', 'data22.txt', ..., 'data2M.txt'],
...
'fileN':['dataN1.txt', 'dataN2.txt', ..., 'dataNM.txt']}
так file1
является data11 + data12 + ... + data1M
и т.д .. .
Так что мой код выглядит следующим образом:
jobs = []
for d in dic:
outfile = str(d)+"_merged.txt"
with open(outfile, 'w') as out:
p = multiprocessing.Process(target = merger.merger, args=(dic[d], name, out))
jobs.append(p)
p.start()
out.close()
и merger.py выглядит следующим образом:
def merger(files, name, outfile):
time.sleep(2)
sys.stdout.write("Merging %n...\n" % name)
# the reason for this step is that all the different files have a header
# but I only need the header from the first file.
with open(files[0], 'r') as infile:
for line in infile:
print "writing to outfile: ", name, line
outfile.write(line)
for f in files[1:]:
with open(f, 'r') as infile:
next(infile) # skip first line
for line in infile:
outfile.write(line)
sys.stdout.write("Done with: %s\n" % name)
Я вижу файл, записанный в папку, в которую он должен пойти, но он пуст. нет заголовка, ничего. Я поставил там отпечатки, чтобы убедиться, что все правильно, но ничего не работает.
Помощь!
Вы называете 'out.close()' сразу после 'p.start()'. Я сомневаюсь, что задача слияния имеет время выполнить, прежде чем файл будет закрыт из-под нее. – Blorgbeard
@Blorgbeard хороший момент, но все еще ничего ... – Pavlos
Это на Linux, как операционная система, не так ли? – tdelaney