Python Glossary English

Python 3.7+Linux · macOSosфункция

os.register_at_fork

os — создание процессов

Регистрирует функции-обработчики, вызываемые до/после os.fork() (в родителе и потомке). Доступно на Unix.

Синтаксис

os.register_at_fork(...)

Нужна библиотекам, которые держат блокировки, потоки или соединения: после fork их нужно восстановить в потомке. Обработчики вызываются только для os.fork и подобных вызовов, которые возвращаются в интерпретатор; обычный запуск через subprocess их не вызывает. fork, сделанный кодом на C в обход Python, их тоже не вызовет.

Примеры

import os
import random
os.register_at_fork(after_in_child=lambda: print('потомок стартовал'))   # → ? только Unix: обработчик лишь запомнен, сейчас ничего не печатается
os.register_at_fork(before=lambda: print('готовимся к fork'), after_in_parent=lambda: print('родитель продолжил'))   # → ? можно задать все три точки; before-обработчики вызываются в обратном порядке регистрации
os.register_at_fork(after_in_child=lambda: random.seed())   # → ? типовой сценарий: потомок переинициализирует ГПСЧ, иначе оба процесса выдадут одинаковые «случайные» числа
pid = os.fork()   # → ? напечатает «готовимся к fork», затем «родитель продолжил» в родителе и «потомок стартовал» в потомке
os.register_at_fork(print)   # → TypeError — аргументы только именованные (before / after_in_parent / after_in_child); снять уже зарегистрированный обработчик нельзя

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности