raven-python
raven-python copied to clipboard
'Queue' object has no attribute 'all_tasks_done'
I using Celery and Django and each time got exception during Celery process exit.
Python==3.6.1
Django==2.0 celery==4.1.0 eventlet==0.22.0 raven==6.5.0
Celery launched with params: -A streamtelecom.settings.celery:consumer_app worker -P eventlet -c 1000 -l warning
When main process receive exit signal it fail with exception in raven:
[2018-01-28 12:07:21,682: WARNING/MainProcess] Error in atexit._run_exitfuncs:
[2018-01-28 12:07:21,682: WARNING/MainProcess] Traceback (most recent call last):
[2018-01-28 12:07:21,682: WARNING/MainProcess] File "/home/anton/streamtelecom/lib/python3.6/site-packages/raven/transport/threaded.py", line 64, in main_thread_terminated
[2018-01-28 12:07:21,683: WARNING/MainProcess] if not self._timed_queue_join(initial_timeout):
[2018-01-28 12:07:21,683: WARNING/MainProcess] File "/home/anton/streamtelecom/lib/python3.6/site-packages/raven/transport/threaded.py", line 92, in _timed_queue_join
[2018-01-28 12:07:21,683: WARNING/MainProcess] queue.all_tasks_done.acquire()
[2018-01-28 12:07:21,683: WARNING/MainProcess] AttributeError
[2018-01-28 12:07:21,683: WARNING/MainProcess] :
[2018-01-28 12:07:21,684: WARNING/MainProcess] 'Queue' object has no attribute 'all_tasks_done'
I'm assuming you have configured eventlet
to monkey patch Queue
and you are using the celery eventlet option. Try using raven.transport.eventlet.EventletHTTPTransport
.
By any chance, do you know of an example of patching the Sentry class within Flask? It seems straightforward to do it with Client....? This may be a better question for stack overflow, anyways..
@dhhagan
from raven.base import Client
from raven.transport.eventlet import EventletHTTPTransport
from raven.contrib.flask import Sentry
client = Client(dsn='http://...', transport=EventletHTTPTransport)
sentry = Sentry(app, client=client)