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 / '
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
モジュールを使用している場合にのみ発生します。 時々それは大丈夫です。
このコードパスは再試行ループ内にあったため、最終的には実行に失敗しました。
私はかなりどこでも私はこれが必要とされているセロリアプリのコントローラに呼び出す必要が、3.1からセロリ4にアップグレードした後、すべての場所でこれを見てきました:
https://github.com/ansible/awx/commit/9ee77a95c6686b266f3ab7105c8d5be7766e6f05
提案された解決策がある場合、plzはprを送信します。 マスターで修正されているかどうかわからないので、マスターの最新の変更を試すこともできます
4.4以降にまだ存在する場合はpingを実行します
最も参考になるコメント
私はかなりどこでも私はこれが必要とされているセロリアプリのコントローラに呼び出す必要が、3.1からセロリ4にアップグレードした後、すべての場所でこれを見てきました:
https://github.com/ansible/awx/commit/9ee77a95c6686b266f3ab7105c8d5be7766e6f05