On 7/22/2016 8:27 PM, Marco S. via Python-list wrote:
I'm developing a web app based on aiohttp, and I find the event loop
concept very interesting. I never programmed with it before, but I
know that node.js and GUIs are based on it.

What I can't understand is how asyncio make it possible to run
multiple tasks concurrently, since it's single threaded (if you don't
use loop.run_in_executor()). I just tried to imagine that it should
act as a cpu scheduler. Is this true?

The code for BaseEventLoop is in asyncio.base_events.py. In particular, see def run_forever. Very simplified,

def run_forever():
    while True:
        handle_ready_io_events()
        call_ready_scheduled_functions()

> If so, how and when asyncio decide to switch to another task?

It does not decide. Asyncio does *cooperative* multi-tasking. This depends on handlers running for a short time and quitting, even if there is more work to do. The OS does *pre-emptive* multi-tasking; it switches processes that are still running.

It is possible to add other events into the mix.  Adding these lines

def tk_update():
    root.update()
    loop.call_later(.01, tk_update)
tk_update()

to an asyncio program before loop.run_forever and the loop will drive a tkinter gui. A day ago, I experimentally patched IDLE to run off of an asyncio loop instead of the tk loop. Everything I tried worked. See https://bugs.python.org/issue27546.

Furthermore I have a question about exceptions in asyncio.

I am too ignorant about this to even ask.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to