On 06/16/2010 11:56 AM, Andrew Badr wrote:
When a room is created, it should start listening for messages. That's why it starts listening in the init, though there is no actual processing. Removing the consumer causes the queue to be deleted, so I don't think that's necessary.

Here's my current attempt: http://dpaste.com/207704/

What I'm going for here -- not achieved yet -- is to have the same # of objects at the 1st and 3rd call to gc.get_objects. My question is how to get there. If you look at the unload method, that's my current attempt to cleanup, but clearly it's either wrong or there's no right way to do it. First time using each of AMQP, Twisted, and the gc module, so please tell me what I'm doing wrong. Also, the number of extra objects (3rd call - 1st call) increases linearly with the argument to range() controlling how many rooms are created, so I know it's something relating to room cleanup.

Oh, I see what you mean, I misinterpreted your original message. Looking through the code it doesn't look like the TimeoutDeferredQueue
created for a consumer is ever released.


On Mon, Jun 14, 2010 at 7:56 PM, Dave Peticolas <d...@krondo.com <mailto:d...@krondo.com>> wrote:

    On 06/14/2010 05:31 PM, Andrew Badr wrote:

        Sorry if you get this message twice; launchpad sucks.

        I have a long-running server processes that listen for new
        messages from some changing set of rooms. I want to make sure
        that when I'm done with a particular room, all the resources
        associated with it are eventually freed. Here's what my Room
        init code does:

           @inlineCallbacks
           def startListening(self):
               routing_key = 'rooms.' + self.id <http://self.id>
        <http://self.id>

               queue_name = routing_key + '::' + CYCLONE_ID
               AMQP_CHANNEL.queue_declare(queue=queue_name,
        durable=False, auto_delete=True)
               AMQP_CHANNEL.exchange_declare(exchange=EXCHANGE_NAME,
        type='topic', durable=True)
               AMQP_CHANNEL.queue_bind(
                       queue=queue_name,
                       exchange=EXCHANGE_NAME,
                       routing_key=routing_key)
               consumer_tag = 'room' + self.id <http://self.id>
        <http://self.id>

               AMQP_CHANNEL.basic_consume(queue=queue_name,
        consumer_tag=consumer_tag)
               queue = yield AMQP_CONNECTION.queue(consumer_tag)
               while True:
                   msg = yield queue.get()
                   self.tell_msg(msg)

        Note that the AMQP connection+channel are global. When the
        server wants to forgot about a room, what do I have to do to
        ensure that all resources will eventually be garbage
        collected? Does it suffice to cancel the consumer? Do I have
        to close the TimeoutDeferredQueue? Looking at the code in
        protocol.py, it looks like there might be no way to make the
        channel forget about the queue. Am I reading that correctly?
        If so, that means I would need a new channel for each room, right?


    That's not just init code, right? I mean you're also processing
    messages.

    Anyway, I think you want to call queue_delete like this (untested):

    AMQP_CHANNEL.queue_delete(queue=queue_name)

    dave


    _______________________________________________
    Mailing list: https://launchpad.net/~txamqp-user
    <https://launchpad.net/%7Etxamqp-user>
    Post to     : txamqp-user@lists.launchpad.net
    <mailto:txamqp-user@lists.launchpad.net>
    Unsubscribe : https://launchpad.net/~txamqp-user
    <https://launchpad.net/%7Etxamqp-user>
    More help   : https://help.launchpad.net/ListHelp



_______________________________________________
Mailing list: https://launchpad.net/~txamqp-user
Post to     : txamqp-user@lists.launchpad.net
Unsubscribe : https://launchpad.net/~txamqp-user
More help   : https://help.launchpad.net/ListHelp


_______________________________________________
Mailing list: https://launchpad.net/~txamqp-user
Post to     : txamqp-user@lists.launchpad.net
Unsubscribe : https://launchpad.net/~txamqp-user
More help   : https://help.launchpad.net/ListHelp

Reply via email to