Python Glossary English

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Сообщить о неточности