[Tkinter-discuss] TKinter and Python asyncio

Bhaskar Chaudhary bha100710 at gmail.com
Wed Dec 20 02:36:54 EST 2017


Here's a very simple example I borrowed from

http://blog.iharder.net/2017/02/03/python-asyncio-and-tkinter-together-with-tcp-and-udp/:

Here is the raw code:
https://pastebin.com/raw/ZGeDULR9

This listens for tcp messages on port 9999 and prints it to a Tkinter
label as and when the message arrives.

I tested this on Python 3.6.3 on Linux.

To test it, here's how you send a TCP message on Linux command line:

echo 'some random message' > /dev/tcp/127.0.0.1/9999

Also note that in the above example - the async i/o loop is run in a
separate thread. But that is just one thread to handle and it is much
better tan handling one new thread for every new request.

As regards Michael Lange comment - while threads are easier to grasp
initially - they are not very scalable.
Imagine having hundreds of thread fetching messages simultaneously -
context switching at that level would be a nightmare.
Better than thread would be spawning a new process - but that too has its limit.

Spawning a new process is what Apache webserver does for handling each
request - but that means several thousands of processes run for a busy
server.
That soon exhausted a lot of CPU and became impractical for servers
with say a 10000 simultaneous visitors.

Then came NGINX server - which manages requests asynchronously -
exactly like using asyncio.
Much more scalable and soon high traffic sites dumped Apache in favor of NGINX.

Bottom line - if scalability is not your concern - threading or
spawning a new process could be OK but asyncio is a better approach
for the kind of thing you are trying to do.

On 12/20/17, c.buhtz at posteo.jp <c.buhtz at posteo.jp> wrote:
> On 2017-12-20 00:23 Michael Lange <klappnase at web.de> wrote:
>> to me like it might be much easier to just download the files from
>> within a separate thread. I don't know what exactly you want to
>> achieve of course, but from your first post my impression was that
>> using threads should not be overly difficult. I might be wrong there,
>> of course.
>
> I need to download between 100 or 200 xml-like files from different
> locations. More specific: I use "feedparser" to get rss/atom feeds.
> _______________________________________________
> Tkinter-discuss mailing list
> Tkinter-discuss at python.org
> https://mail.python.org/mailman/listinfo/tkinter-discuss
>


More information about the Tkinter-discuss mailing list