multiprocessing.Pool
позволяет инициализировать ресурс с помощью параметров initializer
и initarg
.Я был удивлен, узнав, что идея состоит в том, чтобы использовать глобальные переменные, как показано ниже:
import multiprocessing as mp
def init_process(model):
global processor
processor = Processor(model) # this takes time to load...
def process(line):
return processor.process(line) # via global variable `processor` defined in `init_process`
if __name__ == '__main__':
pool = mp.Pool(4, initializer=init_process, initargs=['some-big.model'])
with open('lines.txt') as infile, open('processed-lines.txt', 'w') as outfile:
for processed_line in pool.imap(process, infile):
outfile.write(processed_line)
Концепция не очень хорошо описана в документации multiprocessing.Pool
Надеюсь, этот пример будет полезен другим.