2

キューをリッスンするPythonデーモン(Redis Kombu)を作成しようとしています。タスクを取得し、グリーンスレッドを生成してこのタスクを処理します。

タスクを受け取って問題なく消費できますが、イベントレットを使用してGreenThreadを生成しようとすると、何も実行されていないようです。

印刷もログも表示されません。

class agent(Daemon):
    """
    Agent
    """
    def run(self):  
        # Setup connection
        mainLogger.debug('Connecting to Redis')
        connection = BrokerConnection(
                        hostname=agentConfig['redis_host'],
                        transport="redis",
                        virtual_host=agentConfig['redis_db'],
                        port=int(agentConfig['redis_port']))
        connection.connect()

        # Create an eventlet pool of size 5
        pool = eventlet.GreenPool(5)
        q = connection.SimpleQueue("myq")
        while True:
            try:
               message = q.get(block=True, timeout=1)
               print "GOT A MESSAGE FROM Q !"
               pool.spawn_n(self.foo, 'x')
               print "END SPAWN !"
            except Empty:
               mainLogger.debug('No tasks, going to sleep')
               time.sleep(1)


    def foo(self, x):
        mainLogger.debug('\o/')
        print "HELLO FROM SPAWN"

私が間違っていることはありますか?

4

2 に答える 2

3

コンテキスト切り替えをトリガーするには、sleep()呼び出しに対してeventlet.monkey_patch()を呼び出す必要がありました。

于 2011-07-06T13:10:41.930 に答える
2

eventlet.sleepここで説明されているように使用する必要があります。

http://eventlet.net/doc/basic_usage.html#eventlet.sleep

于 2011-12-07T20:40:47.493 に答える