Very strange issues with collections.Mapping
Jason Swails
jason.swails at gmail.com
Thu Jan 18 16:37:18 EST 2018
Hello!
I am running into a very perplexing issue that is very rare, but creeps up
and is crashing my app.
The root cause of the issue comes down to the following check returning
true:
isinstance([], collections.Mapping)
Obviously you can get this behavior if you register `list` as a subclass of
the Mapping ABC, but I'm not doing that. Because the issue is so rare (but
still common enough that I need to address it), it's hard to reproduce in a
bench test.
What I am going to try is to essentially monkey-patch
collections.Mapping.register with a method that dumps a stack trace
whenever it's called at the time of initial import so I can get an idea of
where this method could *possibly* be getting called with a list as its
argument.
The annoying thing here is that wherever the bug is happening, the crash
happens *way* far away (in a third-party library). I've also determined it
as the root cause of two crashes that seem completely unrelated (except
that the crash is caused by a list not behaving like a dict shortly after
isinstance(obj, collections.Mapping) returns True). These are the
libraries I'm using:
amqp
billiard
celery
dj-database-url
Django
django-redis-cache
enum34
gunicorn
kombu
newrelic
psycopg2
pyasn1
pytz
redis
requests
rsa
six
vine
voluptuous
It's a web application, as you can probably tell. The main reason I ask
here is because I'm wondering if anybody has encountered this before and
managed to hunt down which of these libraries is doing something naughty?
Thanks!
Jason
--
Jason M. Swails
More information about the Python-list
mailing list