[Twisted-Python] Twisted Style
Edmund Dengler
edmundd at eSentire.com
Sat Aug 9 14:57:06 MDT 2003
Hi all!
The Twisted stuff looks very good, and I think I am getting my head around
to the way it works. I am looking for how I should be approaching a basic
problem, and how to cast it in the Twisted model.
Basically, I have a client transferring database rows to a server. I would
like to transfer each row one-at-a-time, and I need information coming
back to know whether the transfer was successful and to record in the
client's database.
I have tried the following (please note that the code has been stripped
to show the essence):
Server (using PB)
-----------------
Has a Perspective:
class MyPerspective(pb.Perspective):
def attached(self, clientref, identity):
...
def attached(self, ref, identity):
...
def perspective_transferXXX(self, XXX):
...
...create an app and a service...
...create appropriate perspective and identity things...
...listen at a socket...
Client (1)
----------
class TransferClient:
def __init__(self):
def go(self):
...connect to server, defer to connection()...
def connection(self, perspective):
# Connection to server has been made
...save away perspective...
self.transferCycle()
def transferCycle(self):
# Start a whole cycle (each cycle may transfer multiple rows)
self.transferXXXs()
def getXXXs(self):
# Lets get the data to transfer
...setup database query, defer result set to transferXXXs()...
def transferXXXs(self, XXXs):
# We have our data from the query
...save away some state information...
self.transferXXX(...first row...)
def transferXXX(self, XXX):
# Transfer a single row
...call remote perspective for XXX, defer return to doneXXX()...
def doneXXX(self, result):
# The row has been transferred and returned a result
if successfully transferred:
...do appropriate work...
if we still need to transfer more rows:
self.transferXXX(...with the next row...)
else:
self.cycleDone()
# Note: if we had other stuff, we would start them
# transferring as well
def cycleDone(self):
# We have done a single cycle of transfers
...put a deferred for YYY seconds to start the cycle again...
Now, this seems like an awful lot of methods simply to support deferred
execution. Is there a way to use flows to acheive this? I have looked at
the HowTo pages, but it is not clear how to use the Flow components within
a PB model. Is there another approach?
Regards!
Ed
More information about the Twisted-Python
mailing list