[Twisted-Python] Transmit queue - how would I go at it?

Nadav Aharony nadav at MIT.EDU
Sat Sep 15 21:36:37 MDT 2007


Thanks Pablo!
this looks pretty clear and neat, I'll try it out.

Just one newbie question - is the "_"  in "acquire_cb(_)"  just a 
placeholder for my own parameters, or does it have an actual meaning?
I've never seen this done in python before, and couldn't find other 
examples for it online...

Cheers,
Nadav


Pablo Martí wrote:
> On Fri, 2007-09-14 at 00:58 -0400, Nadav Aharony wrote:
>   
>> Hi, 
>>
>> I am working on an application where clients request files, and since
>> each file is very large, the server ACKs the requests and then queues
>> them to be served later, one at a time. 
>> I am relatively new to Twisted and was wondering what would be the
>> best way to approach this.
>>     
>
> Hi Nadav,
>
> I had a similar requirement with my application. You must offer an
> asynchronous interface while dealing with each request synchronously. I
> think that you should push your requests to a
> twisted.internet.defer.DeferredQueue and process one at a time with the
> aid of twisted.internet.defer.DeferredLock.
>   
>
> If we consider that each of your petitions has an associated deferred
> that will be called back when its finished:
> (I haven't run this)
>
> from twisted.internet import defer
>
> class OneAtATime(object):
>     def __init__(self):
>         super(OneAtATime, self).__init__()
>         self.queue = defer.DeferredQueue()
>         self.lock = defer.DeferredLock()
>         self.check_queue()
>
>     def check_queue(self):
>         self.queue.get().addCallback(self._process_one)
>     
>     def _process_one(self, petition):
>
>         def acquire_cb(_):
>             # do whatever with your petition
>             # make sure that when you're done you call
>             # self.lock.release() and self.check_queue()
>             # on a state machine, this would be while transitioning
>             # to the "idle" state
>             pass
>
>         self.lock.acquire().addCallback(acquire_cb)
>
>     def queue_petition(self, petition):
>         self.queue.put(petition)
>         return petition.deferred
>
> Regards,
> Pablo
>   
>
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20070915/4e81d145/attachment.html>


More information about the Twisted-Python mailing list