celery -A proj report
.программное обеспечение -> сельдерей: 4.0.2 (скрытый вызов) комбу: 4.1.0 py: 2.7.13 или (py: 2.7.12)
бильярд: 3.5.0.3 redis: 2.10.5
платформа -> система: Darwin arch: 64bit imp: CPython. (хотя обычно: система: Linux arch: 64bit, ELF)
загрузчик -> celery.loaders.app.AppLoader
настройки -> транспорт: результаты 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: ['приложение / json']
TIME_ZONE: "UTC"
CELERY_MESSAGE_COMPRESSION: 'gzip'
CELERY_TASK_ALWAYS_EAGER: неверно
CELERY_RESULT_BACKEND: u ' redis: // localhost : 6380 /'
master
Celery.Также встречается на сельдерее 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
. Иногда работает нормально.
Этот путь кода был даже в цикле повтора, поэтому в конце концов он все еще не был выполнен.
Я видел это повсюду после обновления до сельдерея 4 с 3.1, практически везде, где мне нужно вызвать контроллер приложения сельдерея, это необходимо:
https://github.com/ansible/awx/commit/9ee77a95c6686b266f3ab7105c8d5be7766e6f05
пожалуйста, отправьте PR, если у вас есть какое-либо предлагаемое решение. не уверен, что это исправлено в мастере, поэтому вы также можете попробовать основные последние изменения
пинг, если он все еще существует в 4.4+
Самый полезный комментарий
Я видел это повсюду после обновления до сельдерея 4 с 3.1, практически везде, где мне нужно вызвать контроллер приложения сельдерея, это необходимо:
https://github.com/ansible/awx/commit/9ee77a95c6686b266f3ab7105c8d5be7766e6f05