[Python-Dev] Pythonic concurrency - cooperative MT

Gustavo J. A. M. Carneiro gjc at inescporto.pt
Fri Sep 30 23:55:44 CEST 2005

On Fri, 2005-09-30 at 18:33 +0200, Antoine Pitrou wrote:
> Hi Jp,
> Le vendredi 30 septembre 2005 à 12:20 -0400, Jp Calderone a écrit :
> > "Advocating" might be putting it too strongly :)  "Experimenting with"
> > describes the current state of things most accurately.
> Ok :)
> > The problem it aims to solve is integration with cooperative threading
> > systems which don't work very well.  An example of such a loop is the
> > wx event loop.  
> > 
> > Whenever a modal dialog is displayed or a menu is activated, wx's loop
> > stops cooerating.

  That is wx's problem.  Try PyGTK some day; I hear it's really
good! ;-)

> This specific problem hides the more general problem, which is that GUI
> and network activities have different typical latencies. As I explained
> on the twisted ML, a GUI needs very good response times to feel friendly
> (typically below 20 or even 10 ms.), whereas some network protocols have
> non-trivial calculations which can go above 100 ms.

  With PyGTK a typical solution for this is to use a generator function
executing an "idle function", which would make the non-trivial
calculations, but yield control back to the main loop periodically, in
order to process GUI events. For example, see the last code block in

>  Moreover, you don't
> want a sudden flood of network events to block events in the GUI.

  Process one event at a time, after each event give back control to the
main loop, and give low priority to socket IO events.  Problem solved.

> This is why even without considering wx's specificities, it is still
> useful to keep GUI and network activities in separate threads.

  You are considering a scenario that seldom happens to design a
solution that is far too complicated for most cases.


Gustavo J. A. M. Carneiro
<gjc at inescporto.pt> <gustavo at users.sourceforge.net>
The universe is always one step beyond logic

More information about the Python-Dev mailing list