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