mirror of
https://github.com/python/cpython.git
synced 2025-11-13 23:46:24 +00:00
Issue #11258: Speed up ctypes.util.find_library() under Linux by a factor
of 5 to 10. Initial patch by Jonas H.
This commit is contained in:
parent
877509aef4
commit
8c52027e2d
3 changed files with 18 additions and 8 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
import sys, os
|
import sys, os
|
||||||
import contextlib
|
import contextlib
|
||||||
|
import subprocess
|
||||||
|
|
||||||
# find_library(name) returns the pathname of a library, or None.
|
# find_library(name) returns the pathname of a library, or None.
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
|
|
@ -203,14 +204,19 @@ elif os.name == "posix":
|
||||||
abi_type = mach_map.get(machine, 'libc6')
|
abi_type = mach_map.get(machine, 'libc6')
|
||||||
|
|
||||||
# XXX assuming GLIBC's ldconfig (with option -p)
|
# XXX assuming GLIBC's ldconfig (with option -p)
|
||||||
expr = r'(\S+)\s+\((%s(?:, OS ABI:[^\)]*)?)\)[^/]*(/[^\(\)\s]*lib%s\.[^\(\)\s]*)' \
|
regex = os.fsencode(
|
||||||
% (abi_type, re.escape(name))
|
'\s+(lib%s\.[^\s]+)\s+\(%s' % (re.escape(name), abi_type))
|
||||||
with contextlib.closing(os.popen('LC_ALL=C LANG=C /sbin/ldconfig -p 2>/dev/null')) as f:
|
try:
|
||||||
data = f.read()
|
with subprocess.Popen(['/sbin/ldconfig', '-p'],
|
||||||
res = re.search(expr, data)
|
stdin=subprocess.DEVNULL,
|
||||||
if not res:
|
stderr=subprocess.DEVNULL,
|
||||||
return None
|
stdout=subprocess.PIPE,
|
||||||
return res.group(1)
|
env={'LC_ALL': 'C', 'LANG': 'C'}) as p:
|
||||||
|
res = re.search(regex, p.stdout.read())
|
||||||
|
if res:
|
||||||
|
return os.fsdecode(res.group(1))
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
def find_library(name):
|
def find_library(name):
|
||||||
return _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name))
|
return _findSoname_ldconfig(name) or _get_soname(_findLib_gcc(name))
|
||||||
|
|
|
||||||
|
|
@ -338,6 +338,7 @@ Filip Gruszczyński
|
||||||
Michael Guravage
|
Michael Guravage
|
||||||
Lars Gustäbel
|
Lars Gustäbel
|
||||||
Thomas Güttler
|
Thomas Güttler
|
||||||
|
Jonas H.
|
||||||
Barry Haddow
|
Barry Haddow
|
||||||
Paul ten Hagen
|
Paul ten Hagen
|
||||||
Rasmus Hahn
|
Rasmus Hahn
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #11258: Speed up ctypes.util.find_library() under Linux by a factor
|
||||||
|
of 5 to 10. Initial patch by Jonas H.
|
||||||
|
|
||||||
- Issue #11382: Trivial system calls, such as dup() or pipe(), needn't
|
- Issue #11382: Trivial system calls, such as dup() or pipe(), needn't
|
||||||
release the GIL. Patch by Charles-François Natali.
|
release the GIL. Patch by Charles-François Natali.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue