title: Constantly polling SQS Queue using infinite loop
body: <p>I have an SQS queue that I need to constantly monitor for incoming messages. Once a message arrives, I do some processing and continue to wait for the next message. I achieve this by setting up an infinite loop with a 2 second pause at the end of the loop. This works however I can't help but feel this isn't a very efficient way of solving the need to constantly pole the queue.</p>
  <p>Code example:</p>
  <pre><code>    while (1):
          response = sqs.receive_message(
              QueueUrl=queue_url,
              AttributeNames=[
                  'SentTimestamp'
              ],
              MaxNumberOfMessages=1,
              MessageAttributeNames=[
                  'All'
              ],
              VisibilityTimeout=1,
              WaitTimeSeconds=1
          )
  
          try:
              message = response['Messages'][0]
              receipt_handle = message['ReceiptHandle']
  
              # Delete received message from queue
              sqs.delete_message(
                  QueueUrl=queue_url,
                  ReceiptHandle=receipt_handle
              )
              msg = message['Body']
              msg_json = eval(msg)
              value1 = msg_json['value1']
              value2 = msg_json['value2']
              process(value1, value2)
          except:
              pass
              #print('Queue empty')
          time.sleep(2)
  </code></pre>
  <p>In order to exit the script cleanly (which should run constantly), I catch the KeyboardInterrupt which gets triggered on Ctrl+C and do some clean-up routines to exit gracefully.</p>
  <pre><code>if __name__ == '__main__':
      try:
          main()
      except KeyboardInterrupt:
          logout()
  </code></pre>
  <p>Is there a better way to achieve the constant poling of the SQS queue and is the 2 second delay necessary? I'm trying not to hammer the SQS service, but perhaps it doesn't matter?</p>