[Twisted-Python] Writing Servers
Itamar Shtull-Trauring
itamar at itamarst.org
Wed Mar 15 11:07:54 MST 2006
On Wed, 2006-03-15 at 08:36 -0800, A S wrote:
> That when connection is accepted the new *instance* of
> a protocol is created. However as it is single
> threaded, can use the same instance?
In theory, yes, in practice the way the APIs work make this harder.
> For example (In case of UDP):
UDP doesn't have a factory, or for that matter connections; it's one
protocol instance per port you listen on.
> I want to have same protocol *instance running* for
> diff interface on same port. As this protocol does not
> store any state.
Just have it forward to an object that does the actual work. You can't
have same instance because of the self.transport attribute - how would
it work with two different transports?
> Also instead of creating one when connection comes and
> descard is when connection is broken. Use a single
> one.
That is already the case for UDP.
> I am once the datagramReceived is call, it must return
> before any other request is served. (i am not using
> any deferrer)
>
> Q1) Am i missing some concept?
Nope.
> Q2) What if the request is delegated to deferrer or
> threads, can we still use the same instance of
> protocol class?
Yes.
> Q3) What are the ways to create deferrer itself
> There is little about it, reactor callfromthread or
> callinthread? Any good doc?
Deferreds don't magically make things not block the event loop, and they
almost never need threads. For example,
twisted.web.client.getPage("http://google.com") returns a Deferred but
doesn't use threads. A deferred is just a promise that some code,
responding to some future event (callLater, datagramReceived, a thread,
etc.) will give you a result.
More information about the Twisted-Python
mailing list