通过gevent-socketio进行实时芹菜事件监控

时间:2014-08-18 11:45:28

标签: python celery gevent gevent-socketio

我想从gevent-socketio实时监控芹菜事件。目前,我根据celery docs中的示例配置了以下命名空间。

@namespace('/events')
class EventNamespace(BaseNamespace, BroadcastMixin):
    def listener(self, event):
        self.state.event(event)
        # task name is sent only with -received event, and state
        # will keep track of this for us.
        task = self.state.tasks.get(event['uuid'])

        print "Got task"

        self.emit('msg', 'Task success: {0}'.format(task.name))

    def recv_connect(self):
        prev = None

        self.app = Celery(broker='amqp://guest:guest@127.0.0.1:49154//')

        self.state = self.app.events.State()

        with self.app.connection() as connection:
            recv = self.app.events.Receiver(connection, handlers={
                'task-succeeded': self.listener,
                '*': self.state.event,
            })
            recv.capture(limit=None, timeout=None, wakeup=True)

目前,看起来芹菜事件监视器(recv.capture?)会阻止发出事件,直到应用程序关闭。我可以看到通过" Got任务"调试消息,当我杀死我的服务器时,所有事件都会立即发送给我的消费者。

任何人都可以指导我如何修改它以便在运行时正确使用它们吗?

1 个答案:

答案 0 :(得分:0)

在django应用程序下工作时,我还没有找到解决问题的方法。然而,我在烧瓶内使用烧瓶来制作一种似乎与芹菜配合良好的解决方案。有关详细信息,请访问:https://github.com/iwootten/celery-socketio