Resolvendo o erro "collections' has no attribute 'MutableMapping'" ao utilizar a bilbioteca Tornado

Ao tentar executar uma aplicação que utiliza o tornado.http, você pode receber o seguinte erro:

AttributeError: module 'collections' has no attribute 'MutableMapping'

O problema

Pelo que andei pesquisando, a biblioteca collections foi modificada nas versões superiores ao Python 3.9.

Para versões 3.9 ou inferiores, a classe MutableMapping é importada a partir de import collections.MutableMapping. Para as versões iguais ou superiores ao Python 3.10, a importação deve ser feita a partir de import collections.abc.MutableMapping.

Então, o que provavelmente causa o problema é estar tentando executar o seu projeto que utiliza tornado em uma versão do Python igual ou superior a 3.10.

Solução

Para contornar o problema, podemos fazer uma espécie de Polyfill, que tem como finalidade manter a compabilidade com o código escrito para versões iguais ou anteriores ao Python 3.9.

Veja:

import collections
try:
    from collections import abc
    collections.MutableMapping = abc.MutableMapping
except:
    pass
	

import tornado.websocket
from tornado.httpserver import HTTPServer
# restante das importações