[Twisted-Python] Interactive Twisted client (newbie question?)
Jon Blower
jdb at mail.nerc-essc.ac.uk
Wed Jan 5 10:44:33 EST 2005
Hi Glyph,
Thanks very much for your reply, very useful. I've had another think about my
problem and I guess it boils down to this question: when I'm writing a client
program, how can I simulate a synchronous function call (avoiding callbacks)
like this pseudo-Python, which sends a message then returns its reply:
def sendMessage(message):
transport.send(message)
# Wait for reply to arrive
reply = getReplySomehow()
return reply
In the protocol I am implementing, I expect most messages to be replied to
immediately by the server so this function would not block for long (I'm only
writing a simple, naive client at the moment). The event-driven model seems to
me to be great for implementing servers, but a little more awkward for
implementing simple client programs. Is this comment fair?
I can see how I would implement the above pseudo-function using threads (indeed
I have done so in Java) - perhaps this is my only option to avoid blocking?
Thanks,
Jon
Quoting Glyph Lefkowitz <glyph at divmod.com>:
> On Mon, 2005-01-03 at 23:00 +0000, Jon Blower wrote:
>
> > I'm sure I'm not the first to ask this sort of question, but I've looked
> through
> > the docs and example code and haven't been able to track down an answer.
> I'd
> > be very grateful for any pointers that anyone could offer.
>
> This is why I often suggest the use of 'twistd' for running your Twisted
> code - the reactor.run() call is confusing, because it makes it seem as
> though it's your code's responsibility to start and stop the reactor,
> and possibly to do things before or after that has happened.
>
> Even if you need to start the reactor yourself - for example, if you are
> writing a GUI program - it is best to abstract out the reactor
> start/stop far from your application code.
>
> If I understand the core of your question correctly, it's "How do I use
> Twisted at the interactive Python interpreter?"
>
> There is no easy answer. Twisted is not well-suited towards use at a
> normal Python prompt, because the normal Python prompt is not
> event-driven. There have been a few different forays into interactive
> Python/Twisted integration. The 1.3.0 release includes a 'manhole'
> client/server pair which will allow you to log in and run python code
> inside a running Twisted process. JP Calderone has recently done quite
> a bit of work on a new, better interactive interpreter (including SSH
> access and command-line editing) which looks more like a regular Python
> prompt.
>
> Although there are several different avenues you can take to get there,
> what you probably want to arrive at is a Twisted server that is
> listening on one port for Python commands, and on another for whatever
> protocol it is you are trying to implement. For convenience, it may be
> useful for the "port" that it's listening on to actually be standard
> I/O. This is possible using twisted.internet.stdio.
>
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
--
--------------------------------------------------------------
Dr Jon Blower Tel: +44 118 378 5213 (direct line)
Technical Director Tel: +44 118 378 8741 (ESSC)
Reading e-Science Centre Fax: +44 118 378 6413
ESSC Email: jdb at mail.nerc-essc.ac.uk
University of Reading
3 Earley Gate
Reading RG6 6AL, UK
--------------------------------------------------------------
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
More information about the Twisted-Python
mailing list