Celery: RunTimeError: Acquire on closed pool 尝试使用控制检查

创建于 2017-11-28  ·  3评论  ·  资料来源: celery/celery

清单

  • [x] 我在问题中包含了celery -A proj report的输出。
    (如果你不能这样做,那么至少指定芹菜
    版本受影响)。

软件 -> celery:4.0.2 (latentcall) kombu:4.1.0 py:2.7.13 或 (py:2.7.12)
台球:3.5.0.3 redis:2.10.5
平台 -> 系统:Darwin arch:64bit imp:CPython 。 (虽然通常:system:Linux arch:64bit, ELF)
loader -> celery.loaders.app.AppLoader
设置 ->传输:redis结果:redis :// localhost:6380/

BROKER_TRANSPORT_OPTIONS:{
'fanout_patterns':真,'fanout_prefix':真}
CELERY_TASK_COMPRESSION: 'gzip'
CELERY_TIMEZONE: 'UTC'
CELERY_RESULT_SERIALIZER: 'json'
CELERY_BROKER_URL: u' redis://localhost :6380//'
CELERY_TASK_SERIALIZER: 'json'
CELERY_RESULT_EXPIRES:60
CELERY_ACCEPT_CONTENT: ['application/json']
TIME_ZONE: 'UTC'
CELERY_MESSAGE_COMPRESSION: 'gzip'
CELERY_TASK_ALWAYS_EAGER:假
CELERY_RESULT_BACKEND: u' redis://localhost :6380/'

  • [x] 我已经验证了 Celery 的master分支存在这个问题。

也发生在 celery 4.1.0 上。

重现步骤

尝试使用control模块。 就我而言,我得到了active_queues()

预期行为

我希望只要系统处于良好状态,我就应该能够从control模块中获取信息。 我不明白为什么有时游泳池是关闭的,而有时则不是。

实际行为

这可能与 #1839 中的问题相同

代码会出现运行时错误,所以我无法从 celery 查询我需要的数据。

File "/.../tasks.py", line 80, in workers_on_queue
    for k, v in six.viewitems(celery_app.control.inspect().active_queues()):
  File "/.../lib/python2.7/site-packages/celery/app/control.py", line 116, in active_queues
    return self._request('active_queues')
  File "/.../lib/python2.7/site-packages/celery/app/control.py", line 81, in _request
    timeout=self.timeout, reply=True,
  File "/.../lib/python2.7/site-packages/celery/app/control.py", line 436, in broadcast
    limit, callback, channel=channel,
  File "/.../lib/python2.7/site-packages/kombu/pidbox.py", line 315, in _broadcast
    serializer=serializer)
  File "/.../lib/python2.7/site-packages/kombu/pidbox.py", line 285, in _publish
    with self.producer_or_acquire(producer, chan) as producer:
  File "/usr/local/Cellar/python/2.7.13_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/.../lib/python2.7/site-packages/kombu/pidbox.py", line 247, in producer_or_acquire
    with self.producer_pool.acquire() as producer:
  File "/.../lib/python2.7/site-packages/kombu/resource.py", line 74, in acquire
    raise RuntimeError('Acquire on closed pool')

这仅在我们使用control模块时发生。 有时它工作正常。

该代码路径甚至处于重试循环中,因此最终仍然无法执行。

Feedback Needed ✘

最有用的评论

我一直在升级之后,从3.1看到这一切的地方芹菜4,几乎任何地方,我需要调入芹菜应用程序控制器,这是需要:

https://github.com/ansible/awx/commit/9ee77a95c6686b266f3ab7105c8d5be7766e6f05

所有3条评论

我一直在升级之后,从3.1看到这一切的地方芹菜4,几乎任何地方,我需要调入芹菜应用程序控制器,这是需要:

https://github.com/ansible/awx/commit/9ee77a95c6686b266f3ab7105c8d5be7766e6f05

如果您有任何建议的解决方案,请发送 pr。 不确定它是否已在 master 中修复,因此您也可以尝试 master 最新更改

ping 如果它在 4.4+ 中仍然存在

此页面是否有帮助?
0 / 5 - 0 等级