I'm reading 'Fluent Python' by 'Luciano Ramalho' over and over, but I couldn't understand asyncio.sleep's behavior inside asyncio.
Book says at one part:
Never use time.sleep in asyncio coroutines unless you want to block the main thread, therefore freezing the event loop and probably the whole application as well. (...) it should yield from asyncio.sleep(DELAY).
On the other part:
Every Blocking I/O function in the Python standard library releases the GIL (...) The time.sleep() function also releases the GIL.
As time.sleep() releases GIL codes on other thread can run, but blocks current thread. Since asyncio is single-threaded, I understand that time.sleep blocks asyncio loop.
But, how asyncio.sleep() isn't blocking thread? Is it possible to not delay event loop and wait at the same time?