Сделал без __del__(). Всё равно течет, но это уже не важно.
Сейчас больше интересует другое. У меня в UserHandler есть метод subscribe(), он создаёт подключение к Redis и начинает его слушать
@tornado.gen.engine
def subscribe(self, channel, listener=None):
if (channel in self.subscriptions and self.subscriptions[channel] != None) \
or len(self.subscriptions)>=self.subscriptions_limit:
print self.subscriptions
raise SubscribeException
redis = redis_pool.get()
yield tornado.gen.Task(
redis.subscribe,
channel
)
if listener == None:
redis.listen(self.common_listener)
else:
redis.listen(listener)
self.subscriptions[channel] = redis
Т.е. клиент подписывается на какой-то канал (уведомления, чат и т.п.). Всё бы ничего, но внезапно, когда зашел со второго браузера, я обнаружил, что self.subscription используется всеми подключенными клиентами сразу, т.е. один подписался, другие уже не могут (дамп self.subscriptions перед порождением исключения). Почему такое происходит? Разве на каждое подключение не создаётся отдельный объект UserHandler со своими переменными?
UPDРазобрался. Написал в on_open()
А из самого класса убрал. Пойду учить матчасть.