From 0c1fbc17b48f56c6070d335ed291a24c91ed190a Mon Sep 17 00:00:00 2001 From: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Date: Thu, 24 Nov 2022 09:10:27 +0530 Subject: GH-66285: fix forking in `asyncio` (#99539) `asyncio` now does not shares event loop and signal wakeupfd in forked processes. --- Lib/asyncio/events.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'Lib/asyncio') diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py index a327ba54a32..39a01048b4c 100644 --- a/Lib/asyncio/events.py +++ b/Lib/asyncio/events.py @@ -17,6 +17,7 @@ import socket import subprocess import sys import threading +import signal from . import format_helpers @@ -665,6 +666,14 @@ class BaseDefaultEventLoopPolicy(AbstractEventLoopPolicy): def __init__(self): self._local = self._Local() + if hasattr(os, 'fork'): + def on_fork(): + # Reset the loop and wakeupfd in the forked child process. + self._local = self._Local() + signal.set_wakeup_fd(-1) + + os.register_at_fork(after_in_child=on_fork) + def get_event_loop(self): """Get the event loop for the current context. -- cgit v1.2.3