cuando voy a la asyncio
página, el primer ejemplo es un programa hola mundo. Cuando lo ejecuto en python 3.73
no puedo ver nada diferente al normal, ¿Alguien puede decirme la diferencia y dar un ejemplo no trivial?
In [1]: import asyncio
...:
...: async def main():
...: print('Hello ...')
...: await asyncio.sleep(5)
...: print('... World!')
...:
...: # Python 3.7+
...: asyncio.run(main())
Hello ...
... World!
In [2]:
In [2]: import time
...:
...: def main():
...: print('Hello ...')
...: time.sleep(5)
...: print('... World!')
...:
...: # Python 3.7+
...: main()
Hello ...
... World!
Aumenté intencionalmente el tiempo de 1 a 5 segundos, espero ver algo especial, pero no lo hice.
No está viendo nada especial porque no hay mucho trabajo asíncrono en su código. Sin embargo, la principal diferencia es que time.sleep(5)
está bloqueando y asyncio.sleep(5)
no es bloqueante.
Cuando time.sleep(5)
se llama, bloqueará toda la ejecución del script y se pondrá en espera, simplemente congelado, sin hacer nada. Pero cuando llamas await asyncio.sleep(5)
le pedirá al ciclo de eventos que ejecute otra cosa mientras su declaración de espera finaliza su ejecución.
Aquí hay un ejemplo mejorado.
import asyncio
async def hello():
print('Hello ...')
await asyncio.sleep(5)
print('... World!')
async def main():
await asyncio.gather(hello(), hello())
asyncio.run(main())
Saldrá:
~$ python3.7 async.py
Hello ...
Hello ...
... World!
... World!
Puedes ver eso await asyncio.sleep(5)
no está bloqueando la ejecución del script.
Espero eso ayude 🙂
hay muchos recursos sobre esto por ahí… este es uno: realpython.com/async-io-python
-hiro protagonista
24 de junio de 2019 a las 4:27
¿Esperabas algo diferente?
– Kenny Ostrom
24 de junio de 2019 a las 4:29
@KennyOstrom Sí, creo que un ejemplo debería ser el más simple y no trivial
– una oferta no se puede rechazar
24 de junio de 2019 a las 4:38
Sobre
asyncio.sleep
precisión stackoverflow.com/a/65727201/13782669– alex_noname
23 de enero de 2021 a las 7:08