Caleb Hattingh <caleb.hatti...@gmail.com> added the comment:

> * I think we should stick to your structure and push things to 
> docs.python.org as soon as every next section is somewhat ready.

Ok. I'll get a PR going for the start page of the tutorial.

> * Every big section should probably have its own page, linking prev/next 
> tutorial pages.
> * I'd organize the tutorial in a dedicated directory like 
> "Doc/library/asyncio-tutorial/".

Agree.

> BTW, maybe we should consider using the new iPythonn async repl: 
> https://blog.jupyter.org/ipython-7-0-async-repl-a35ce050f7f7   What do you 
> think about that?

I saw ​Matthias' tweets about that recently too. It's cool! but...for teaching 
purposes it's not great to introduce a whole new complex tool (ipython) to 
explain a different complex tool (asyncio). My experience is that *every* 
single new thing that is mentioned adds cognitive load for learners. For this 
tutorial my feeling is to keep as much to "ordinary" Python stuff as possible, 
i.e., stdlib.

> Just a quick note: I'd try to not mention the low-level loop APIs as long as 
> possible (e.g. no loop.run_until_complete() etc).

For sure, I agree with you 100% on this. But I find it hard to do as soon as I 
have to make a real thing. I think you're right that we focus initially on only 
high-level stuff first (and for most of the tut). That is doable.

> I think we'll collapse first two section into one ("Coroutines" and 
> "Awaitables" into "Awaitables") and link the tutorial from that new section.

ok

> Yay for streams!
> I never use tkinter myself :( I remember trying to use it and it didn't work 
> on my macOS.  So I'd try to either:
> * build a simple browser app (that would require us to implement HTTP 0.9 
> which can be fun);
> * build a terminal app;
> * use iPython repl to connect to our asyncio server (might end up being more 
> complicated than the first two options).

I too have bashed my head for many hours over the years trying to get Tkinter 
to work on Mac, but a lot of work has gone into this recently and the newer 
(release) Python's have bundled Tk 8.6: 
https://www.python.org/download/mac/tcltk/ (this is what learners will prob use 
on Mac)

Tkinter gets a bad rap, but it's really quite powerful--and portable. Runs 
great on a Raspberry Pi for example.

Noticing your hesitation towards tkinter ;) , I spent a few hours on Sunday 
sketching out my "chat server/client" idea a little more, using Tkinter for the 
client UI:

https://github.com/cjrh/chat

(Notice especially in the README all the different aspects of asyncio, streams 
etc. that we would be able to cover and explain with an actual use-case. THESE 
are the kinds of tricky things people desperately want help with.)

It's still rough obviously (I can prob reduce the total LOC footprint by 20% & 
I'm sure you can improve on some parts) but I just wanted to show you something 
runnable you can prod and poke to give a concrete idea of what I'm suggesting. 
It works on Windows, should work on Linux but I haven't tested yet.

My proposal is that we slowly build up towards this, starting with the "hello 
world" simple case (asyncio.run calling main() which prints out "hello world" 
or something), and then adding the necessary features, piece by piece, with 
commentary along the way on what each piece does, and why it is done in a 
particular way. (I specifically like to write like this: simplistic case first, 
and then improve incrementally)

- Only requires stdlib (so we don't have to explain or link to pip/virtualenv 
etc. etc.)
- shows a wide range of *interoperating* asyncio features in a condensed app
- client has a proper GUI, i.e. "looks" like an actual application, not just an 
ugly CLI thing
- client handles reconnection, if the server goes down and comes back later.
- using signal handling to trigger shutdown (esp. the server)
- signal handling works on Windows (CTRL-C and CTRL-BREAK near-instant 
controlled shutdown)
- server is 100% asyncio (so that situation is covered), but client requires 
marrying two loops (so this situation is also covered), one for tkinter and one 
for asyncio. (This is a common problem, not just with UI frameworks but also 
with game programming frameworks like pygame, pyarcade and so on. Again, this 
is the kind of problem many people ask for help with.)
- thus, an example showing how to run asyncio in a thread. (asyncio.run works 
great in a thread, nice job!)
- an actual SSL example that works (this was surprisingly hard to find, 
eventually found one at PyMOTW)

I fully realise that this case study implementation might look weird and ugly, 
and we don't really want to mention threads at all, and we don't want to 
explicitly refer to the loop, or create a Future instance, etc., but this is 
the kind of case study that will give people guidance on how to handle these 
*actual problems* that they are going to come across.

If you have a look and still don't want to go this way, that's ok, I'm happy to 
go with a different suggestion.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue34831>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to