Сообщить об ошибке.

Передача файлов из цикла событий asyncio в Python

Передача файлов из низкоуровнего кода asyncio

Синтаксис:

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.