Update multiprocessing example

This commit is contained in:
Matthew Honnibal 2017-11-04 23:07:57 +01:00
parent d185927998
commit ba0201de07
1 changed files with 9 additions and 6 deletions

View File

@ -34,21 +34,24 @@ def main(output_dir, model='en_core_web_sm', n_jobs=4, batch_size=1000,
data, _ = thinc.extra.datasets.imdb() data, _ = thinc.extra.datasets.imdb()
texts, _ = zip(*data[-limit:]) texts, _ = zip(*data[-limit:])
partitions = partition_all(batch_size, texts) partitions = partition_all(batch_size, texts)
items = ((i, [nlp(text) for text in texts], output_dir) for i, texts executor = Parallel(n_jobs=n_jobs)
in enumerate(partitions)) do = delayed(transform_texts)
Parallel(n_jobs=n_jobs)(delayed(transform_texts)(*item) for item in items) tasks = (do(nlp, i, batch, output_dir)
for i, batch in enumerate(partitions))
executor(tasks)
def transform_texts(batch_id, docs, output_dir): def transform_texts(nlp, batch_id, texts, output_dir):
print(nlp.pipe_names)
out_path = Path(output_dir) / ('%d.txt' % batch_id) out_path = Path(output_dir) / ('%d.txt' % batch_id)
if out_path.exists(): # return None in case same batch is called again if out_path.exists(): # return None in case same batch is called again
return None return None
print('Processing batch', batch_id) print('Processing batch', batch_id)
with out_path.open('w', encoding='utf8') as f: with out_path.open('w', encoding='utf8') as f:
for doc in docs: for doc in nlp.pipe(texts):
f.write(' '.join(represent_word(w) for w in doc if not w.is_space)) f.write(' '.join(represent_word(w) for w in doc if not w.is_space))
f.write('\n') f.write('\n')
print('Saved {} texts to {}.txt'.format(len(docs), batch_id)) print('Saved {} texts to {}.txt'.format(len(texts), batch_id))
def represent_word(word): def represent_word(word):