[Zope-dev] Queue object in Zope products
kapil thangavelu
kvthan@wm.edu
Thu, 24 Oct 2002 13:55:08 -0700
volatile lifetimes are only as long in as the object is in a non-ghost state.
you can't reliably predict a period for this, but you can use a __setstate__
hook, to capture volatiles before the object is ghostified.
also its good practice to set a class attribute of the volatile to none, or
use a computed attribute to set the initial value of a volatile, imo.
-kapil
On Thursday 24 October 2002 01:05 am, Joost van Lawick wrote:
> Hello,
>
> I am working on a Zope product that throws data into a queue that is
> monitored by a number (3) of producers. Producers can talk to Corba
> objects. I use omniOrb for this. Producers take out data from the outqueue
> and send it to other Corba objects. This is the basic setup:
>
> class SIPConnector(SimpleItem):
> """Connector class"""
>
> def __init__(self, id, title):
> self.id = id
> self.title = title
> self.n = 3 # number of producers
>
> def initConnectionPool(self):
> self._v_outqueue = Queue.Queue()
>
> for i in range(self.n):
> id = 'tc' + str(i)
> tp = SIPProducer(id)
> thread.start_new_thread(self.runProducer, (tc, self._v_outqueue,))
>
> def post(self, sid, to, msg):
> self._v_outqueue.put(sid, to, msg)
>
>
> def runProducer(self, tp, oq):
> # connect to Corba dispatcher
> tp.orb, tp.cmf = tp._connect()
>
> while 1:
> try:
> msg = oq.get(0)
> print msg
> tp..cmf.xmit(msg)
> except Queue.Empty:
> time.sleep(0.05)
>
>
>
>
> class SIPProducer(CorbaBaseClass):
>
> def __init__(self, id):
> self.id = id
>
>
> This basically works. However, if I put msg's in the queue with the post
> method from a page template, and I do this a couple of times, quickly, I
> get an attribute error on self._v_inqueue. It is somehow gets lost. Does
> anyone know what I am doing wrong here? What happened to the 'lost' queue?
>
>
> Cheers,
>
>
> Joost