What's the advantage of this over using using a lock around self._zmq?