我想从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任务"调试消息,当我杀死我的服务器时,所有事件都会立即发送给我的消费者。
任何人都可以指导我如何修改它以便在运行时正确使用它们吗?
答案 0 :(得分:0)
在django应用程序下工作时,我还没有找到解决问题的方法。然而,我在烧瓶内使用烧瓶来制作一种似乎与芹菜配合良好的解决方案。有关详细信息,请访问:https://github.com/iwootten/celery-socketio