`__del__` is pretty broken in Python, because it can't handle garbage collector cycles correctly, and it's never been guaranteed that `__del__` gets called immediately by the language definition, only by accident of the implementation of CPython.  In short, it really shouldn't be relied upon for anything important.  The recommended way to handle resource allocation is with the `with` statement and `__enter__` and `__exit__`.  It probably doesn't hurt to leave this in, but I would add `__enter__` and `__exit__`, so `with` statements will work, and ensure that calling `stop` twice isn't harmful (even if the second time would be a no-op), that way `__del__` will work when it can but you also provide a reliable way to automatically destroy the connection for users using the `with` statement.