Python 3.3+Linux · macOSosфункция
os.sendfile
os — эффективное копирование
Копирует данные между дескрипторами напрямую в ядре, без буфера в пространстве пользователя. Доступно на Unix.
Синтаксис
os.sendfile(...)
Данные не проходят через память Python, поэтому так быстро отдают файлы в сокет — на этом построен socket.sendfile. Может передать не всё запрошенное, возвращает число отправленных байт. Сигнатура и допустимые типы дескрипторов различаются между Linux и macOS, поэтому в переносимом коде удобнее высокоуровневый socket.sendfile.
Примеры
import os
src = os.open('send_src.txt', os.O_RDWR | os.O_CREAT | os.O_TRUNC) # временный файл-источник
print(os.write(src, b'hello world!')) # → 12 — подготовили 12 байт данных
dst = os.open('send_dst.txt', os.O_WRONLY | os.O_CREAT | os.O_TRUNC) # приёмник; на практике сюда подставляют дескриптор сокета
print(os.sendfile(dst, src, 0, 5)) # → 5 — ядро переслало b'hello' с нулевого смещения, минуя память процесса
print(os.sendfile(dst, src, 5, 100)) # → 7 — отправлен остаток файла, count можно брать с запасом
print(os.sendfile(dst, src, 12, 10)) # → 0 — смещение за концом файла, отправлять нечего
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности