Celery: RunTimeError: Erfassen Sie auf geschlossenem Pool, versuchen Sie, die Kontrollprüfung zu verwenden

Erstellt am 28. Nov. 2017  ·  3Kommentare  ·  Quelle: celery/celery

Checkliste

  • [x] Ich habe die Ausgabe von celery -A proj report in die Ausgabe aufgenommen.
    (wenn Sie dies nicht können, dann geben Sie zumindest den Sellerie an
    betroffene Version).

software -> sellerie:4.0.2 (latentcall) kombu:4.1.0 py:2.7.13 oder (py:2.7.12)
Billard: 3.5.0.3 redis: 2.10.5
Plattform -> system:Darwin arch:64bit imp:CPython . (allerdings normalerweise: system:Linux arch:64bit, ELF)
loader -> celery.loaders.app.AppLoader
Einstellungen -> Transport: Redis Ergebnisse: 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: Falsch
CELERY_RESULT_BACKEND: u' redis://localhost :6380/'

  • [x] Ich habe überprüft, dass das Problem für den master Zweig von Celery besteht.

Kommt auch bei Sellerie vor 4.1.0.

Schritte zum Reproduzieren

Versuchen Sie, das Modul control . In meinem Fall bekomme ich active_queues() .

Erwartetes Verhalten

Ich gehe davon aus, dass ich die Informationen aus dem Modul control abrufen kann, solange sich das System in einem guten Zustand befindet. Ich verstehe nicht genau, warum der Pool manchmal geschlossen ist und manchmal nicht.

Tatsächliches Verhalten

Dies könnte das gleiche Problem sein wie in #1839

Der Code weist einen Laufzeitfehler auf, sodass ich die benötigten Daten von Sellerie nicht abfragen kann.

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')

Dies geschieht nur, wenn wir das Modul control . Manchmal funktioniert es gut.

Dieser Codepfad befand sich sogar in einer Wiederholungsschleife, sodass er am Ende immer noch nicht ausgeführt wurde.

Feedback Needed ✘

Hilfreichster Kommentar

Ich habe dies überall gesehen, nachdem ich von 3.1 auf Sellerie 4 aktualisiert habe, so ziemlich überall, wo ich den Sellerie-App-Controller aufrufen muss.

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

Alle 3 Kommentare

Ich habe dies überall gesehen, nachdem ich von 3.1 auf Sellerie 4 aktualisiert habe, so ziemlich überall, wo ich den Sellerie-App-Controller aufrufen muss.

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

Bitte senden Sie eine pr, wenn Sie eine vorgeschlagene Lösung haben. Ich bin mir nicht sicher, ob es in Master behoben ist, also können Sie auch die neuesten Änderungen von Master ausprobieren

ping, wenn es noch in 4.4+ vorhanden ist

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen