tutorial programming español await asyncio async python asynchronous aio-write

programming - python async await



Escritura asíncrona de archivos posible en Python? (4)

¿Hay alguna manera fácil de escribir en un archivo de forma asincrónica en Python?

Sé que el archivo que viene con Python está bloqueando; lo cual está bien en la mayoría de los casos. Para este caso particular, necesito escribir para no bloquear la aplicación en absoluto, o al menos lo más mínimamente posible.



Según entiendo, las E / S asíncronas no son lo mismo que las E / S sin bloqueo.

En el caso de E / S sin bloqueo, una vez que un descriptor de archivo se configura como "sin bloqueo", una llamada al sistema de read() (por ejemplo) devolverá EWOULDBLOCK (o EAGAIN ) si la operación de lectura bloquearía la llamada proceso para completar la operación. Las llamadas al sistema select() , poll() , epoll() , etc. se proporcionan para que el proceso pueda solicitar al SO que se le epoll() cuando uno o más descriptores de archivos estén disponibles para realizar alguna operación de E / S.

La E / S asíncrona funciona al poner en cola una solicitud de E / S al descriptor de archivo, rastreado independientemente del proceso de llamada. Para un descriptor de archivo que admita E / S asíncrona (típicamente, las decodificaciones de disco sin procesar), un proceso puede llamar a aio_read() (por ejemplo) para solicitar que se lea una cantidad de bytes desde el descriptor del archivo. La llamada al sistema regresa inmediatamente, ya sea que la E / S haya finalizado o no. Algún tiempo después, el proceso sondea el sistema operativo para completar la E / S (es decir, el búfer está lleno de datos).

Un proceso (de un solo subproceso) que solo realiza E / S sin bloqueo podrá leer o escribir desde un descriptor de archivo que está listo para E / S cuando otro no está listo. Pero el proceso debe emitir sincrónicamente las llamadas al sistema para realizar la E / S a todos los descriptores de archivos listos. Mientras que, en el caso de E / S asíncrona, el proceso solo está verificando la finalización de la E / S (búfer lleno de datos). Con la E / S asincrónica, el sistema operativo tiene la libertad de operar en paralelo tanto como sea posible para dar servicio a la E / S, si así lo desea.

Con eso, ¿hay algún contenedor para el sistema POSIX aio_read / write etc.?


Python 3 parece tener tal funcionalidad. Ver PEP 3116 .


Estoy desarrollando aio.h licitaciones a python: pyaio

Se ejecuta solo en Linux ..