Python 3.4+multiprocessingфункция
multiprocessing.set_forkserver_preload()
способ запуска
Задаёт модули, которые сервер forkserver импортирует заранее, чтобы каждый новый процесс получал их уже загруженными. Работает только с forkserver.
Синтаксис
multiprocessing.set_forkserver_preload(module_names)
Вызывать нужно до первого процесса или пула: сервер стартует один раз, и поздний вызов молча ничего не меняет. Модуль, который не удалось импортировать, по умолчанию просто пропускается без сообщения — опечатка в имени не видна (в 3.15 появился on_error='warn' или 'fail'). При spawn и fork вызов ничего не делает, а на Windows forkserver нет вовсе. Выигрыш заметен с тяжёлыми модулями вроде numpy: импорт идёт один раз в сервере, а не в каждом ребёнке.
Примеры
import multiprocessing as mp
def job():
pass
if __name__ == '__main__':
if 'forkserver' in mp.get_all_start_methods():
ctx = mp.get_context('forkserver')
ctx.set_forkserver_preload(['json', 'no_such_module'])
p = ctx.Process(target=job)
p.start()
p.join()
print('exitcode', p.exitcode) # → exitcode 0 — опечатку в имени никто не заметил
else:
print('exitcode 0') # на Windows forkserver нет
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности