Very strange issues with collections.Mapping

John Krukoff john.krukoff at ubnt.com
Fri Jan 19 13:49:55 EST 2018


Have you ruled out the possibility that collections.Mapping has been
(perhaps temporarily) assigned to something else?

On Thu, Jan 18, 2018 at 2:37 PM, Jason Swails <jason.swails at gmail.com>
wrote:

> 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
> --
> https://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list