title: Paho MQTT client connection reliability (reconnect on disconnection)
body: <p>What is the most reliable way to use the Python Paho MQTT client? I want to be able to handle connection interruptions due to WiFi drops and keep trying to reconnect until it's successful.</p>
  
  <p>What I have is the following, but are there any best practices I'm not adhering to?</p>
  
  <pre class="lang-py prettyprint-override"><code>import argparse
  from time import sleep
  
  import paho.mqtt.client as mqtt
  
  
  SUB_TOPICS = ("topic/something", "topic/something_else")
  RECONNECT_DELAY_SECS = 2
  
  
  def on_connect(client, userdata, flags, rc):
      print "Connected with result code %s" % rc
      for topic in SUB_TOPICS:
          client.subscribe(topic)
  
  # EDIT: I've removed this function because the library handles
  #       reconnection on its own anyway.
  # def on_disconnect(client, userdata, rc):
  #     print "Disconnected from MQTT server with code: %s" % rc
  #     while rc != 0:
  #         sleep(RECONNECT_DELAY_SECS)
  #         print "Reconnecting..."
  #         rc = client.reconnect()
  
  
  def on_msg(client, userdata, msg):
      print "%s %s" % (msg.topic, msg.payload)
  
  
  if __name__ == "__main__":
      p = argparse.ArgumentParser()
      p.add_argument("user")
      p.add_argument("password")
      p.add_argument("host")
      p.add_argument("--port", type=int, default=1883)
      args = p.parse_args()
  
      client = mqtt.Client()
      client.on_connect = on_connect
      client.on_message = on_msg
      client.username_pw_set(args.user, args.password)
      client.connect(args.host, args.port, 60)
      client.loop_start()
  
      try:
          while True:
              sleep(1)
      except KeyboardInterrupt:
          pass
      finally:
          client.loop_stop()
  </code></pre>