[Twisted-Python] (Un)Twisted Clients and Servers (newbie)

Bob Ippolito bob at redivi.com
Wed May 26 09:55:22 EDT 2004

On May 26, 2004, at 8:26 AM, Bill la Forge wrote:

> Finally wrote my first Twisted-based client and
> server:
> http://compstrm.sourceforge.net/twcs/csprotocol.html
> Both the client and server are implemented as light-
> weight processes, where pipes are used for reading
> and writing to remote processes. This allows the
> logic flow to be more straight-line.
> I'm also "translucently" switching threads in the
> client, using in-line method calls, so that reads
> and writes to the client do not block the main thread.
> (I'm trying to show how much clearer asynchronous
> programming can be using Computational Streams.)

You really need to take a look at Stackless Python.  It's a much better 
fit for the programming paradigm you want, and tasklet communication is 
WAY faster than thread communication in Python.  I also think that the 
Communicating Sequential Processes model is much nicer than your 
Computational Streams model.

As far as switching between "async" and 'blocking", why don't you just 
yield BlockingMode and yield AsyncMode?  That would kill two birds with 
one stone.  What's the difference between yielding True, False, and 
None (that is rhetorical, I read the implementation)?  Personally I 
think you should use useful names, even if they are just aliases for 
built-in python datatypes.  For example, the following lines are much 
more self-documenting:

yield Cooperate
yield Stop
yield BlockingMode
yield AsyncMode

When I did a framework very similar to but much more simple than yours, 
I also made it possible to integrate with Deferred (to block on it and 
resume on success/err, and also to return a deferred instead of a 
generator using a function wrapper).

Translucent thread migration isn't the greatest idea, sometimes you 
need to tie data structures to the a threadstate (for C level code.. 
something like database cursors, or whatever).  It's usually better to 
keep the same code on the same thread whenever possible.  But of 
course, it's better just to not use them at all unless you are calling 
some blocking C code, because it doesn't do anything for you with 
Python bytecode.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2357 bytes
Desc: not available
Url : http://twistedmatrix.com/pipermail/twisted-python/attachments/20040526/8720e89e/attachment.bin 

More information about the Twisted-Python mailing list