raven-python icon indicating copy to clipboard operation
raven-python copied to clipboard

'Queue' object has no attribute 'all_tasks_done'

Open Skorpyon opened this issue 6 years ago • 3 comments

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'

Skorpyon avatar Jan 28 '18 10:01 Skorpyon

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.

ashwoods avatar Jan 30 '18 19:01 ashwoods

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 avatar May 23 '18 15:05 dhhagan

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

m3talstorm avatar Sep 10 '18 14:09 m3talstorm