code: def process_queue(self):
          
          m = pycurl.CurlMulti()
          m.handles = []
  
          # Loop the queue and create Curl objects for processing
          for item in self._queue:
              c = self._create_curl(*item)
              m.add_handle(c)
              m.handles.append(c)
  
          # Process the collected Curl handles
          num_handles = len(m.handles)
          while num_handles:
              while 1:
                  # Perform the calls
                  ret, num_handles = m.perform()
                  if ret != pycurl.E_CALL_MULTI_PERFORM:
                      break
              m.select(1.0)
  
          # Collect data
          results = []
          for c in m.handles:
              c.status = c.getinfo(c.HTTP_CODE)
              if 'Content-Encoding: gzip' in c.response_headers.getvalue():
                  c.body = cStringIO.StringIO(self._gunzip_body(c.body.getvalue()))
              result = { "data" : self._digest_result(c.body.getvalue()), "code": c.status }
              if not c.status or c.status >= 400:
                  # Don't throw the exception because some might have succeeded
                  result['exception'] = HapiThreadedError(c)
  
              results.append(result)
  
              
          # cleanup
          for c in m.handles:
              if hasattr(c, "data_out"):
                  c.data_out.close()
  
              c.body.close()
              c.response_headers.close()
              c.close()
              m.remove_handle(c)
  
          m.close()
          del m.handles
          self._queue = []
  
          return results
docs: Processes all API calls since last invocation, returning a list of data
          in the order the API calls were created