greenlets and how they can be used

J

James Mills

Hey all,

The "greenlet" from http://codespeak.net/py/dist/greenlet.html
is a rather interesting way of handling flow of control.

I can't seem to find anything else on the subject
except for the above link and the most recent version
0.2 and it's tests.

What can "greenlet"'s be used for ? What use-cases
have you guys used them for (if any) ?

Can they be used in place of threads with much
the same effect - but more lightweight ?

cheers
James
 
A

Aaron Brady

Hey all,

The "greenlet" fromhttp://codespeak.net/py/dist/greenlet.html
is a rather interesting way of handling flow of control.

I can't seem to find anything else on the subject
except for the above link and the most recent version
0.2 and it's tests.

What can "greenlet"'s be used for ? What use-cases
have you guys used them for (if any) ?

Can they be used in place of threads with much
the same effect -  but more lightweight ?

I don't know Erlang, but it seems to be useful for a construction of a
unit of work that is more consistent with the underlying goal.

I had a dream for a while that in a GUI framework, every event would
spawn a unique thread. The GUI would remain responsive even while
executing minor tasks. Of course, shaving a second off running time
isn't exactly mission-critical to GUI users.
 
J

James Mills

I had a dream for a while that in a GUI framework, every event would
spawn a unique thread. The GUI would remain responsive even while
executing minor tasks. Of course, shaving a second off running time
isn't exactly mission-critical to GUI users.

Do you think greenlet's (this implementation anyway)
would be useful in circuits (1) ? When you say every
even that was created would spawn a new thread
or greenlet ... Makes me wonder ... Just a thought ...
What's yours ?

cheers
James

1. http://trac.softcircuit.com.au/circuits/
 
M

Mark Wooding

James Mills said:
The "greenlet" from http://codespeak.net/py/dist/greenlet.html
is a rather interesting way of handling flow of control.

Ahh, yes. It's actually a rather old idea, but too rarely used.
What can "greenlet"'s be used for ? What use-cases have you guys used
them for (if any) ?

I've one project in which I use coroutines (either greenlets or some
coroutines I concocted out of Python's built-in threading) extensively.
The system consists of a server which speaks a text-based protocol
(written in C), a graphical monitor program, and a number of ancillary
services which are both clients of the server, and augment it by
providing additional commands. The monitor and the services are all in
Python, and make extensive use of coroutines.

One reason for this is that some of the server's commands can take a
long time, so it's useful for the programs to be able to do other things
while they wait for replies. Full-on threading would be possible, but
(a) in fact I make a /lot/ of coroutines, and (b) with coroutines I
don't have to think anywhere near as hard about synchronization.

You can browse about here, if you like:

http://git.distorted.org.uk/gitweb/~mdw/tripe?a=tree;h=python

The main Python module is in py/; the services are in svc/, and the
graphical monitor is in mon/.
Can they be used in place of threads with much the same effect - but
more lightweight ?

More lightweight, and much easier to reason about. They also confuse
other libraries less.

-- [mdw]
 
J

James Mills

Back when I was still using Perl, there was - and still is, I guess - a really nice framework called POE, that allowed you to write event-driven state machines in a really easy and pleasant way. Under POE, EVERYTHING was an event. When writing a network server, each incoming client connection was an event, within a connection, each incoming piece of data was an event; when reading a file, each line fired an event (i.e. I/O was completely asynchronous); when querying a database, each result row would fire an event. What was even better, you could very easily plug GTK's or Tk's event loop into the whole mix and have GUI interactions fire events, too.
POE was one of the nicest software frameworks I have ever used, and I've been continuously frustrated by the lack of something like it in other languages such as Python or Ruby.

It does exist :) It's called circuits.
Or at least circuits is a framework that I develop
and build which sounds very similar to POE in
some ways :)

cheers
James
 
J

James Mills

(snip)
Then, one very sad day, a Gentoo upgrade broke POE. I got it working again a few months later, but by then I had somehow lost interest in Perl and discovered the beauty of Python, where my search for an appropriate replacement was frustrated (Twisted seemed to be the closest equivalent, but it seemed overly complex to me, at least I never got the hang of it...).

It would seem to me that circuits is quite similar
to POE - I've never really used or played with Perl though
and probably will never :)
Or, to put it briefly, I would really like to take a look at that sometime. If you intend to release it in any form, I would like to hear about it.

Currently released: circuits-1.0b1

See: http://trac.softcircuit.com.au/circuits/
Oh. I see, it already IS available. How nice!!! That is going to be an interesting evening!
Oh, and thank you very much for bringing this to my attention!!!

Your very welcome ... circuits is by no means a replacement
or competitor to Twisted - it has very different design goals
and architecture (nicer/simpler ihmo). That said though anything
that Twisted can do, circuits can do - I've deliberately tried to
keep the Component Library as simple and straight forward
as possible.

Happy hacking!

cheers
James
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,023
Latest member
websitedesig25

Latest Threads

Top