Python 3.4+multiprocessingфункция
multiprocessing.get_context()
способ запуска
Возвращает объект контекста с тем же набором имён, что у модуля (Process, Queue, Pool, Lock…), но привязанный к заданному способу запуска.
Синтаксис
ctx = multiprocessing.get_context(method=None) # 'spawn' | 'fork' | 'forkserver'
Лучший способ выбрать spawn, fork или forkserver: в отличие от set_start_method(), он не трогает глобальное состояние, поэтому годится для библиотек и вызывается сколько угодно раз. Умолчание зависит от ОС и версии: Windows — spawn, macOS — spawn с 3.8, Linux — fork до 3.13 и forkserver с 3.14. Явный ctx = get_context('spawn') делает поведение одинаковым на всех ОС и избавляет от DeprecationWarning, который с 3.12 даёт fork из процесса с живыми потоками. Объекты разных контекстов не смешивайте: Queue одного и Process другого могут не сработать. Неизвестное имя — ValueError.
Примеры
import multiprocessing as mp
def square(x):
return x * x
if __name__ == '__main__':
ctx = mp.get_context('spawn')
print(ctx.get_start_method()) # → spawn
with ctx.Pool(2) as pool:
print(pool.map(square, [1, 2, 3])) # → [1, 4, 9]
import multiprocessing as mp
if __name__ == '__main__':
try:
mp.get_context('thread')
except ValueError as e:
print(e) # → cannot find context for 'thread'
print(mp.get_start_method(allow_none=True)) # → None — глобальное умолчание не тронуто
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности