Celery: RunTimeError:閉じたプールで取得して制御検査を使用しようとします

作成日 2017年11月28日  ·  3コメント  ·  ソース: celery/celery

チェックリスト

  • [x] celery -A proj reportの出力を問題に含めました。
    (これができない場合は、少なくともセロリを指定してください
    影響を受けるバージョン)。

ソフトウェア->セロリ:4.0.2(潜在呼び出し)昆布:4.1.0py:2.7.13または(py:2.7.12)
ビリヤード:3.5.0.3redis:2.10.5
プラットフォーム->システム:ダーウィンアーチ:64ビットimp:CPython。 (通常:system:Linux arch:64bit、ELF)
ローダー-> celery.loaders.app.AppLoader
設定-> transport:redis結果:redis :// localhost:6380 /

BROKER_TRANSPORT_OPTIONS:{
'fanout_patterns':True、 'fanout_prefix':True}
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:False
CELERY_RESULT_BACKEND: u'redis:// localhost :6380 / '

  • [x]この問題がCeleryのmasterブランチに対して存在することを確認しました。

セロリ4.1.0でも発生します。

再現する手順

controlモジュールを使用してみてください。 私の場合、 active_queues()取得しています。

予想される行動

システムが良好な状態である限り、 controlモジュール内から情報を取得できるはずです。 プールが閉鎖されている場合と閉鎖されていない場合がある理由を正確に理解していません。

実際の動作

これは#1839と同じ問題である可能性があります

コードにランタイムエラーが発生するため、セロリから必要なデータをクエリできません。

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

提案された解決策がある場合、plzはprを送信します。 マスターで修正されているかどうかわからないので、マスターの最新の変更を試すこともできます

4.4以降にまだ存在する場合はpingを実行します

このページは役に立ちましたか?
0 / 5 - 0 評価