mirror of https://github.com/python/cpython
bpo-41843: Reenable use of sendfile in shutil module on Solaris (GH-23893)
This commit is contained in:
parent
426569eb8c
commit
8f82d9aa21
|
@ -517,7 +517,7 @@ the use of userspace buffers in Python as in "``outfd.write(infd.read())``".
|
||||||
|
|
||||||
On macOS `fcopyfile`_ is used to copy the file content (not metadata).
|
On macOS `fcopyfile`_ is used to copy the file content (not metadata).
|
||||||
|
|
||||||
On Linux :func:`os.sendfile` is used.
|
On Linux and Solaris :func:`os.sendfile` is used.
|
||||||
|
|
||||||
On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB
|
On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB
|
||||||
instead of 64 KiB) and a :func:`memoryview`-based variant of
|
instead of 64 KiB) and a :func:`memoryview`-based variant of
|
||||||
|
@ -529,6 +529,9 @@ file then shutil will silently fallback on using less efficient
|
||||||
|
|
||||||
.. versionchanged:: 3.8
|
.. versionchanged:: 3.8
|
||||||
|
|
||||||
|
.. versionchanged:: 3.14
|
||||||
|
Solaris now uses :func:`os.sendfile`.
|
||||||
|
|
||||||
.. _shutil-copytree-example:
|
.. _shutil-copytree-example:
|
||||||
|
|
||||||
copytree example
|
copytree example
|
||||||
|
|
|
@ -48,7 +48,7 @@ COPY_BUFSIZE = 1024 * 1024 if _WINDOWS else 64 * 1024
|
||||||
# This should never be removed, see rationale in:
|
# This should never be removed, see rationale in:
|
||||||
# https://bugs.python.org/issue43743#msg393429
|
# https://bugs.python.org/issue43743#msg393429
|
||||||
_USE_CP_SENDFILE = (hasattr(os, "sendfile")
|
_USE_CP_SENDFILE = (hasattr(os, "sendfile")
|
||||||
and sys.platform.startswith(("linux", "android")))
|
and sys.platform.startswith(("linux", "android", "solaris")))
|
||||||
_HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile") # macOS
|
_HAS_FCOPYFILE = posix and hasattr(posix, "_fcopyfile") # macOS
|
||||||
|
|
||||||
# CMD defaults in Windows 10
|
# CMD defaults in Windows 10
|
||||||
|
@ -110,7 +110,7 @@ def _fastcopy_fcopyfile(fsrc, fdst, flags):
|
||||||
def _fastcopy_sendfile(fsrc, fdst):
|
def _fastcopy_sendfile(fsrc, fdst):
|
||||||
"""Copy data from one regular mmap-like fd to another by using
|
"""Copy data from one regular mmap-like fd to another by using
|
||||||
high-performance sendfile(2) syscall.
|
high-performance sendfile(2) syscall.
|
||||||
This should work on Linux >= 2.6.33 only.
|
This should work on Linux >= 2.6.33, Android and Solaris.
|
||||||
"""
|
"""
|
||||||
# Note: copyfileobj() is left alone in order to not introduce any
|
# Note: copyfileobj() is left alone in order to not introduce any
|
||||||
# unexpected breakage. Possible risks by using zero-copy calls
|
# unexpected breakage. Possible risks by using zero-copy calls
|
||||||
|
@ -265,7 +265,7 @@ def copyfile(src, dst, *, follow_symlinks=True):
|
||||||
return dst
|
return dst
|
||||||
except _GiveupOnFastCopy:
|
except _GiveupOnFastCopy:
|
||||||
pass
|
pass
|
||||||
# Linux
|
# Linux / Android / Solaris
|
||||||
elif _USE_CP_SENDFILE:
|
elif _USE_CP_SENDFILE:
|
||||||
try:
|
try:
|
||||||
_fastcopy_sendfile(fsrc, fdst)
|
_fastcopy_sendfile(fsrc, fdst)
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Solaris now uses :func:`os.sendfile` fast-copy syscall for more efficient
|
||||||
|
:mod:`shutil` file copy related functions.
|
Loading…
Reference in New Issue