回调中的 Tornado IOLoop 异常 Celery 工作线程中没有

2024-04-14

我在用tornado.ioloop inside celery工人,因为我需要使用 mongodb。

class WorkerBase():
    @gen.engine
    def foo(self,args,callback)
        bar = ['Python','Celery','Javascript','HTML']

        # ... process something ....

        callback(bar)

    @gen.engine
    def RunMyTask(self,args):

        result = yield gen.Task(self.foo,args=args)
        # Stop IOLoop instance
        IOLoop.instance().stop()


@task(name="MyWorker",base=WorkerBase)
def CeleryWorker(args):
    # This works because i'm adding base as WorkerBase
    CeleryWorker.RunMyTask(args)
    IOLoop.instance().start()
    return True

当我调用任务时,它给出一个错误:

[2014-10-02 12:12:11,561: ERROR/Worker-4] Exception in callback None
Traceback (most recent call last):
    File "/var/www/myapp/env/local/lib/python2.7/site-packages/tornado/ioloop.py", line 832, in start
fd_obj, handler_func = self._handlers[fd]
KeyError: 16

or

[2014-10-02 12:12:11,561: ERROR/Worker-4] Exception in callback None
Traceback (most recent call last):
    File "/var/www/myapp/env/local/lib/python2.7/site-packages/tornado/ioloop.py", line 832, in start
fd_obj, handler_func = self._handlers[fd]
KeyError: 14

这些错误并不一致。有加薪条件吗?


这看起来像是一个线程问题。我不熟悉 celery 的线程模型,但看起来它正在启动 CeleryWorker 的多个副本,每个副本都尝试运行相同的单例 IOLoop.instance()。如果你要像这样运行它,每个工作线程都需要它自己的 IOLoop - 看看同步是什么龙卷风.httpclient.HTTPClient https://github.com/tornadoweb/tornado/blob/6f3f2561cb5fb25785358ba604ecd51219e6efda/tornado/httpclient.py#L54创建并运行临时 IOLoop

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

回调中的 Tornado IOLoop 异常 Celery 工作线程中没有 的相关文章

随机推荐