Python Glossary Русский

Python 3.7+Linux · macOSosfunction

os.register_at_fork

os — process creation

Register callables run before/after os.fork() in parent and child. Availability: Unix.

Syntax

os.register_at_fork(...)

It serves libraries holding locks, threads or connections that must be reset in the child after fork. Handlers run only for os.fork and similar calls that return to the interpreter; an ordinary subprocess launch does not trigger them. A fork made by C code bypassing Python will not trigger them either.

Examples

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); снять уже зарегистрированный обработчик нельзя

See also

Common errors

Open in the full glossarydocs.python.orgReport an inaccuracy