title: Twisted Klein: Synchronous behavior
body: <p>I am using Twisted Klein because one of the promise of the framework is it is Asynchronous, but i tested that app i develop and a little code for testing and the framework behavior seems to be synchronous.</p>
  
  <p>The test server code is:</p>
  
  <pre><code># -*- encoding: utf-8 -*-
  import json
  import time
  from datetime import datetime
  
  from klein import Klein
  
  app = Klein()
  
  def setHeader(request, content_type):
  
      request.setHeader('Access-Control-Allow-Origin', '*')
      request.setHeader('Access-Control-Allow-Methods', 'GET')
      request.setHeader('Access-Control-Allow-Headers', 'x-prototype-version,x-requested-with')
      request.setHeader('Access-Control-Max-Age', 2520)
      request.setHeader('Content-type', content_type)
  
  
  def cleanParams(params):
  
      for key in params.keys():
  
          param = params[key]
          params[key] = param[0]
  
      return params
  
  
  @app.route('/test/', methods=["GET"])
  def test(request):
  
      setHeader(request,'application/json')
  
      time.sleep(5)
  
      return json.dumps([str(datetime.now())])
  
  if __name__ == "__main__":
      app.run(host='0.0.0.0',port=12030)
  </code></pre>
  
  <p>And the request for testing is:</p>
  
  <pre><code># -*- encoding: utf-8 -*-
  import requests
  from datetime import datetime
  
  if __name__ == "__main__":
  
      url = "http://192.168.50.205:12030"
  
      params = {
      }
  
      print datetime.now()
      for i in xrange(6):
          result = requests.get(url + "/test/", params)
  
          print datetime.now(), result.json()
  </code></pre>
  
  <p>With the server up, if i run the second code alone:</p>
  
  <pre><code>2016-07-19 12:50:53.530000
  2016-07-19 12:50:58.570000 [u'2016-07-19 12:50:58.548000']
  2016-07-19 12:51:03.604000 [u'2016-07-19 12:51:03.589000']
  2016-07-19 12:51:08.634000 [u'2016-07-19 12:51:08.625000']
  2016-07-19 12:51:13.670000 [u'2016-07-19 12:51:13.654000']
  2016-07-19 12:51:18.717000 [u'2016-07-19 12:51:18.708000']
  2016-07-19 12:51:23.764000 [u'2016-07-19 12:51:23.748000']
  </code></pre>
  
  <p>Perfect, but if i run at the same time two instances:</p>
  
  <p>Instance 1:</p>
  
  <pre><code>2016-07-19 12:53:05.025000
  2016-07-19 12:53:10.057000 [u'2016-07-19 12:53:10.042000']
  2016-07-19 12:53:20.113000 [u'2016-07-19 12:53:20.097000']
  2016-07-19 12:53:30.181000 [u'2016-07-19 12:53:30.166000']
  2016-07-19 12:53:40.236000 [u'2016-07-19 12:53:40.219000']
  2016-07-19 12:53:50.316000 [u'2016-07-19 12:53:50.294000']
  2016-07-19 12:54:00.381000 [u'2016-07-19 12:54:00.366000']
  </code></pre>
  
  <p>Instance 2:</p>
  
  <pre><code>2016-07-19 12:53:05.282000
  2016-07-19 12:53:15.074000 [u'2016-07-19 12:53:15.059000']
  2016-07-19 12:53:25.141000 [u'2016-07-19 12:53:25.125000']
  2016-07-19 12:53:35.214000 [u'2016-07-19 12:53:35.210000']
  2016-07-19 12:53:45.270000 [u'2016-07-19 12:53:45.255000']
  2016-07-19 12:53:55.362000 [u'2016-07-19 12:53:55.346000']
  2016-07-19 12:54:05.402000 [u'2016-07-19 12:54:05.387000']
  </code></pre>
  
  <p>And the server output:</p>
  
  <pre><code>2016-07-19 12:53:10-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:04 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:15-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:10 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:20-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:15 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:25-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:20 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:30-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:25 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:35-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:30 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:40-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:35 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:45-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:40 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:50-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:45 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:53:55-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:50 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:54:00-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:53:55 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  2016-07-19 12:54:05-0400 [-] "192.168.50.205" - - [19/Jul/2016:16:54:00 +0000] "GET /test/ HTTP/1.1" 200 30 "-" "python-requests/2.9.1"
  </code></pre>
  
  <p>As you can see, the server is blocking the current execution and it seems to be working in synchronous instead asynchronous.</p>
  
  <p>What i am missing?</p>
  
  <p>Best Regards.</p>