[3.12] gh-118761: Revert "Improve import time of subprocess (GH-129427)" (GH-130201) (#130205)

gh-118761: Revert "Improve import time of `subprocess` (GH-129427)" (GH-130201)

* Revert "gh-118761: Improve import time of `subprocess` (GH-129427)"

This reverts commit 49f24650e4.
Also known as f502c8f6a6 in 3.13 (PR GH-129447)
Also known as f65aa0d1bf in 3.12 (PR GH-129448)

This caused bugs in the `__del__` finalizer:
 https://github.com/python/cpython/issues/118761#issuecomment-2661504264

---------
(cherry picked from commit ae30646089)

Co-authored-by: Gregory P. Smith <greg@krypto.org>
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
This commit is contained in:
Miss Islington (bot) 2025-02-16 19:56:18 +01:00 committed by GitHub
parent 4f09a85aca
commit 042b49246b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 6 additions and 14 deletions

View file

@ -43,8 +43,10 @@ getstatusoutput(...): Runs a command in the shell, waits for it to complete,
import builtins import builtins
import errno import errno
import io import io
import locale
import os import os
import time import time
import signal
import sys import sys
import threading import threading
import warnings import warnings
@ -136,8 +138,6 @@ class CalledProcessError(SubprocessError):
def __str__(self): def __str__(self):
if self.returncode and self.returncode < 0: if self.returncode and self.returncode < 0:
# Lazy import to improve module import time
import signal
try: try:
return "Command '%s' died with %r." % ( return "Command '%s' died with %r." % (
self.cmd, signal.Signals(-self.returncode)) self.cmd, signal.Signals(-self.returncode))
@ -375,8 +375,6 @@ def _text_encoding():
if sys.flags.utf8_mode: if sys.flags.utf8_mode:
return "utf-8" return "utf-8"
else: else:
# Lazy import to improve module import time
import locale
return locale.getencoding() return locale.getencoding()
@ -1657,9 +1655,6 @@ class Popen:
# Don't signal a process that we know has already died. # Don't signal a process that we know has already died.
if self.returncode is not None: if self.returncode is not None:
return return
# Lazy import to improve module import time
import signal
if sig == signal.SIGTERM: if sig == signal.SIGTERM:
self.terminate() self.terminate()
elif sig == signal.CTRL_C_EVENT: elif sig == signal.CTRL_C_EVENT:
@ -1764,9 +1759,6 @@ class Popen:
kwargs = {} kwargs = {}
if restore_signals: if restore_signals:
# Lazy import to improve module import time
import signal
# See _Py_RestoreSignals() in Python/pylifecycle.c # See _Py_RestoreSignals() in Python/pylifecycle.c
sigset = [] sigset = []
for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'): for signame in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
@ -2216,13 +2208,9 @@ class Popen:
def terminate(self): def terminate(self):
"""Terminate the process with SIGTERM """Terminate the process with SIGTERM
""" """
# Lazy import to improve module import time
import signal
self.send_signal(signal.SIGTERM) self.send_signal(signal.SIGTERM)
def kill(self): def kill(self):
"""Kill the process with SIGKILL """Kill the process with SIGKILL
""" """
# Lazy import to improve module import time
import signal
self.send_signal(signal.SIGKILL) self.send_signal(signal.SIGKILL)

View file

@ -0,0 +1,4 @@
Reverts a change in the previous release attempting to make some stdlib
imports used within the :mod:`subprocess` module lazy as this was causing
errors during ``__del__`` finalizers calling methods such as ``terminate``, or
``kill``, or ``send_signal``.