import asyncio loop = asyncio.get_event_loop() # Новое в Python 3.7. loop.sendfile(transport, file, offset=0, count=None, *, fallback=True)
transport
- транспорт для передачи,file
- обычный файловый объект,offset=0
- откуда начать чтение файла,count=None
- общее количество байтов для передачи,fallback=True
- чтение и отправка файла, без использования системного вызова sendfile()
.Асинхронный метод низкоуровнего API цикла событий loop.sendfile()
отправляет файл file
через транспорт transport
. Возвращает общее количество отправленных байтов. Представляет собой сопрограмму.
Метод использует высокопроизводительную функцию os.sendfile()
, если она доступна.
Аргумент file
файл должен быть обычным файловым объектом, открытым в двоичном режиме mode='rb'
.
Аргумент смещения offset
сообщает, откуда начать чтение файла.
Если указан аргумент count
, то это общее количество байтов для передачи в отличие от отправки файла до достижения EOF.
Положение файла всегда обновляется, даже если этот метод вызывает ошибку.
Метод файлового объекта file.tell()
может использоваться для получения фактического количества отправленных байтов.
Если аргумент fallback=True
, то модуль asyncio
будет вручную читать и отправлять файл, когда платформа не поддерживает системный вызов sendfile()
(например, Windows или сокет SSL в Unix).
Если система не поддерживает системный вызов sendfile()
, то возникает ошибка asyncio.SendfileNotAvailableError
, а так же происходит откат к значению fallback=False
.
Новое в Python 3.7.