[Twisted-Python] Deterministic "program counter" for asynchronious events
mgeisler at mgeisler.net
Thu Jun 7 11:18:12 EDT 2007
I'm writing a runtime system for doing secure multiparty computation,
and here I have used deferreds with great success.
All players run the same program (but with different input) and each
player communicate with other players as needed to share intermediate
results. These results need to be associated with the right operation
and for this I use a program counter.
This minimal example shows my solution without network traffic:
From twisted.internet.defer import Deferred, DeferredList, gatherResults
pc = (0,)
pc = pc[:-1] + (pc[-1]+1,)
pc = pc + (1,)
def finish_mul(arg, pc):
print "finish_mul(%s): pc = %s" % (arg, pc)
def mul(a, b):
pc = inc_pc(pc)
results = gatherResults([a,b])
x = Deferred() # Declare variables
y = Deferred()
z = Deferred()
w = Deferred()
mul(x,y) # Schedule multiplications
x.callback(2) # The value for x arrives over the network
if len(sys.argv) > 1:
y.callback(3) # y gets a value, enabling mul(x,y) to proceed.
w.callback(5) # z and w are ready and mul(z,w) can proceed.
Here mul() schedules calls to finish_mul(), and it is this call which
I would like to have a deterministic labelling of. I have solved it by
having a "two-dimensional" program counter: the calls to mul() get
labels (1,) and (2,). Their calls to the sub-operation finish_mul()
get labels (1,1) and (2,1) respectively.
This works, invoking the example with and without a command line
argument gives the same labels for finish_mul(). But it is cumbersome
to drag this program counter around all the code, and (what is worse)
it is easy to forget to increment it and to create sub program
counters at the right times.
So have anybody done something similar where you wanted to start a
bunch of operations which might start sub-operations themselves and
where everything needed to be deterministically labelled?
Martin Geisler --- <mgeisler at mgeisler.net> --- http://mgeisler.net
Read, write, create Exif data in PHP with PEL: http://pel.sf.net
Take control of your webserver with PHP Shell: http://phpshell.sf.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 188 bytes
Desc: not available
Url : http://twistedmatrix.com/pipermail/twisted-python/attachments/20070607/a934f9a3/attachment.pgp
More information about the Twisted-Python