| import sys | |
| __all__ = ['register_after_fork'] | |
| if sys.platform == 'win32' or sys.version_info < (3, 7): | |
| import multiprocessing.util as _util | |
| def _register(func): | |
| def wrapper(arg): | |
| func() | |
| _util.register_after_fork(_register, wrapper) | |
| else: | |
| import os | |
| def _register(func): | |
| os.register_at_fork(after_in_child=func) | |
| def register_after_fork(func): | |
| """Register a callable to be executed in the child process after a fork. | |
| Note: | |
| In python < 3.7 this will only work with processes created using the | |
| ``multiprocessing`` module. In python >= 3.7 it also works with | |
| ``os.fork()``. | |
| Args: | |
| func (function): Function taking no arguments to be called in the child after fork | |
| """ | |
| _register(func) | |