Created
April 1, 2016 21:06
-
-
Save BibMartin/ac4a80b6559d205e56eb8c06ba61df93 to your computer and use it in GitHub Desktop.
Asynchronous service with tornado
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "# Using asynchronous services with `tornado`\n", | |
| "\n", | |
| "In this notebook, I show how one can use asynchronous abilities of tornado to speed up (and robustify) a web server." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Create a web server with `tornado`" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "First, let's create a web server. It is composed of at least three parts:\n", | |
| "\n", | |
| "* A Handler\n", | |
| "* Making an `Application`\n", | |
| "* Running the server" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Create a simple handler\n", | |
| "\n", | |
| "Here is the code to create a simple handler. As one can guess, it answers a list of 2 timestamps : \n", | |
| "\n", | |
| "```python\n", | |
| "import time\n", | |
| "import pandas as pd\n", | |
| "from tornado import ioloop, web, httpserver, httpclient\n", | |
| "\n", | |
| "class LongQueryHandler(web.RequestHandler):\n", | |
| " def get(self):\n", | |
| " response = [pd.Timestamp.utcnow().time().isoformat()] # Catch the current time.\n", | |
| " time.sleep(0.1) # Wait 0.1 second.\n", | |
| " response.append(pd.Timestamp.utcnow().time().isoformat()) # Catch the time again.\n", | |
| " self.write(pd.json.dumps(response)) # Returns a JSON.\n", | |
| "```\n", | |
| "\n", | |
| "### Create a syncronous call to this handler\n", | |
| "\n", | |
| "```python\n", | |
| "class SynchronousHandler(web.RequestHandler):\n", | |
| " def get(self):\n", | |
| " client = httpclient.HTTPClient()\n", | |
| " output = [pd.Timestamp.utcnow().time().isoformat()]\n", | |
| " response = client.fetch('http://localhost:8888/longquery')\n", | |
| " output += pd.json.loads(response.body)\n", | |
| " output.append(pd.Timestamp.utcnow().time().isoformat())\n", | |
| " self.write(pd.json.dumps(output))\n", | |
| "```\n", | |
| "\n", | |
| "### Create an asynchronous equivalent\n", | |
| "\n", | |
| "```python\n", | |
| "class AsynchronousHandler(web.RequestHandler):\n", | |
| " @web.asynchronous\n", | |
| " def get(self):\n", | |
| " client = httpclient.AsyncHTTPClient()\n", | |
| " self.output = [pd.Timestamp.utcnow().time().isoformat()]\n", | |
| " response = client.fetch('http://localhost:8888/longquery',self.on_response)\n", | |
| " def on_response(self, response):\n", | |
| " self.output += pd.json.loads(response.body)\n", | |
| " self.output.append(pd.Timestamp.utcnow().time().isoformat())\n", | |
| " self.write(pd.json.dumps(self.output))\n", | |
| " self.finish()\n", | |
| "```\n", | |
| "\n", | |
| "### Create an `Application`\n", | |
| "\n", | |
| "```python\n", | |
| "app = web.Application([\n", | |
| " (\"/longquery\", LongQueryHandler),\n", | |
| " (\"/synchronous\", SynchronousHandler),\n", | |
| " (\"/asynchronous\", AsynchronousHandler),\n", | |
| " ])\n", | |
| "```\n", | |
| "\n", | |
| "### Launch the server\n", | |
| "\n", | |
| "```python\n", | |
| "server = httpserver.HTTPServer(app)\n", | |
| "server.bind(8888)\n", | |
| "server.start(0) # forks one process per cpu\n", | |
| "ioloop.IOLoop.current().start()\n", | |
| "```" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "That's it. copy all of that file in a `main.py` file and simply run `python main.py`." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## Use the webserver" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import grequests, requests\n", | |
| "import pandas as pd" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "sync_url = 'http://localhost:8888/synchronous'\n", | |
| "async_url = 'http://localhost:8888/asynchronous'" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Call synchronously the synchronous service" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[['21:00:12.923877', '21:00:12.928092', '21:00:13.028360', '21:00:13.030066'],\n", | |
| " ['21:00:13.034132', '21:00:13.036605', '21:00:13.136873', '21:00:13.138057'],\n", | |
| " ['21:00:13.141112', '21:00:13.142100', '21:00:13.242325', '21:00:13.243175']]" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "[requests.get(sync_url).json() for i in range(3)]" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "As we can see, each query is executed the one after the other. This is simply because python waits for the first response before launching the second query, etc." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'109.924966 ms / query'" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAEUCAYAAAB3UQK0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXncHFWV978nCWHfYQIkEkE2RQR1jIgsD+DI4gKOji8w\n4ivKqojgAuOgEmRxBBXlRZYAoriACqIBFRDGZxxkERgBhWQIoJBEjOwCYQnhvH/cekjTT29V3dV1\nq+r3/Xyez9Pddfrc0/d09an63Vu3zN0RQgghYmdC0QEIIYQQvaCCJYQQohSoYAkhhCgFKlhCCCFK\ngQqWEEKIUqCCJYQQohSoYDVhZueb2SIzu6PN9v3M7Pbk7zoz22rYMQohRB1RwRrPBcBuHbbfB+zo\n7lsDJwLnDiUqIYSoOZOKDiA23P06M5veYfuNDU9vBKbmH5UQQgidYfXHgcAviw5CCCHqgM6wMmJm\nOwMHANt3sNG6V0IIkQF3t+bXdIaVATN7HTALeLe7P9bJ1t31F9HfcccdV3gM+lNeyvJXVF7aoYLV\nGkv+xm8w2xC4FNjf3e8dalRCCFFjJAk2YWY/AEaAtc3sAeA4YDLg7j4L+DywFnCmmRmwxN1nFBWv\nEELUBRWsJtx9vy7bDwIOGlI4YsCMjIwUHYJogfISJ7HlxTrphaI/zMzVv0IIkQ4zwzXpQgghRFlR\nwRJCCFEKVLCEEEKUAhUsIYQQpUAFSwghRClQwRJCCFEKVLCEEEKUAhUsIYQQpUAFSwghRClQwRJC\nCFEKVLCEEEKUAhUsIYQQpUAFSwghRClQwRJCCFEKVLCEEEKUAhUsIYQQpUAFSwghRClQwRJCCFEK\nVLCEEEKUAhUsIYQQpUAFSwghRClQwRJCCFEKVLCEEEKUAhUsIYQQpUAFqwkzO9/MFpnZHR1sTjez\neWZ2m5ltM8z4hBCirqhgjecCYLd2G81sD+BV7r4pcAhw9rACE0KIOqOC1YS7Xwc81sFkL+DCxPYm\nYHUzmzKM2IQQos5MKjqAEjIVmN/wfGHy2qJWxiee2N3hKqvA6qvDwoXdbVdfHVZYARa1bO3lrL02\nvOMdcOGF3W0Bdt8dliyBa6/tbmsGK68MTz3V3XaFFeDII2HSpOD/61+H557r/r6NNoIFC8J7uvHK\nV8L668MNN3S3nTABDjsMZs+G+fO726+6Kuy4I/z8591tATbbDO6+uzfbVVeFJ5/sbmcGBxwAl14K\nTzzR3X7qVNhtN7jgAnDvbv/mN8Mzz8AdbYXwZSy3HHzsY3DOOeE93ZgyBXbdFX7wg+62ED5rLzGb\nwUorwdNPd7d98cXw/Xvxxe62668PDz7Y3Q5ggw3gL3/pzbbXz+UevqO99kEvdmnbnzixt77Ko/0V\nV2y/TQUrZ666aiZm4fH06SNMnz4yzuaEE+CFF8KPeqdkARx3XEj8pz4Vfjja4R5+VCZPhh//GN71\nrs5+f/c7eOghWLw47ICvf31n+8sug7vugkMOgXXW6Wx7yimwzz4wbVooECedBIcf3vk9ixaFz7rm\nmnDooZ1t//53OPtseOMbw+fdfPPO9t/7XviB/sxn4F//NRTeThx/PBx8MMyZA9tt19n2l7+E224L\nP9AzZnS2HR2F3/4W3v9+2HTTzraXXRaK0JFHwmc/29l28WI47TRYfvlQJN7zns728+aFQv/YY6HY\nTpvW2f7002GbbeALX4Cjjupsu2QJnHwynHpq+Ax77NHZ/o474PLLYe+9YcstO9v+8Idwzz3w8Y/D\naqt1tj3ppJDnI4/sbHffffD5z4e29967s+2tt8KVV8L228NOO3W2veYauOmm8D1ad93usQIce2xn\nuwUL4DvfCQdTO+zQ2fZXvwr7eC/7a6/tz58fDoZ32in0QSeuugpuuSUcKK611vjt998/yv33jwJd\nDjrdXX9Nf8B04I42284G/k/D87nAlDa23gurreY+YYL7I490t5082X3iRPfFizvbLV3qbuZ+3nnu\nH/5wd7/f+Ib7EUe4H3ig+7nndrffZx93cJ8zp7vttGnu8+eHx/fe677xxt3fc/vtoU9e85rutvPn\nu0+d6v7ud7v/9Kfd7XfZxf2aa9zXXdd90aLu9iut5P7Rj7p/+cvdbQ87LMR9+undbY89NvThFVd0\nt913X/cLLnBffvnutg8/7L7WWu7f/354XzeuuMJ9zz3d3/IW9+uv726/1VbuV17pvt563W2fftp9\nxRXdzzgj9GE3Lrww9MlFF3W3fec7g+3Yd6sT0Nt36aqrgu0HPtDd9qyzgu1xx3W3/fSng+2dd3a3\nhfCb0I0bbgi2X/xid9ujjgq2c+f21v4663S3u+66YHvSSd1tjzgi2N5zT3fbKVPck9/Ocb+pGsNq\njSV/rZgNfBDAzLYFHnf3HgQ6IYQQ/SBJsAkz+wEwAqxtZg8AxwGTCRV/lrv/wsz2NLN7gKeBAwbR\nbq86cBrbcEyTzm8a+zSM+c3jc47Z5m2fh20aytwfefWJqBcqWE24+3492HQZgUnH2GCktTuny2Db\nuL1Xv1ns0/pO8540fZLWd56xpI276v2RJZZB2/ZKXu2XKdaY25ckKIQQohSoYJWQMko3WSTBtP5j\nkcDyQpJgfVB/tUYFKwLyPF0ftN9mn3n4Tus/RgksD5mk1x+xYeRekmDxfrP4LLr9NH5boYJVMobx\nJcn7C5hXkasyeR4g5F3gqsqwchKjv6ztawxLdCQW6UaSYP9IEuyPGGLolaJjLbr9dqhgVZxYv3hl\nI4Z+jCGGMWKKRdQHFawIyFu3j2WsYRj+Y/msMdjmbR+L7173hRhyUoZYY2i/HSpYFScW6UaSYP/k\nnUtJgvFQdKxFt98OFayKE+sXr2zE0I95xpBncRNiUKhgRUAMMoQkwcHGEoNt3vax+C6DzFWmWItu\nX9PahRBClB4VrIoTy1iDxrD6R9PaRd1RwYqAPE+tY1qRYBj+87IveqWLYeQypliGOfNsGO2XKdaY\n21fBEkIIUQpUsCpOLNKNJMH+kSRYH9RfrVHBioA8TtfH/PUq3WTx3fi/SP8xSmB5yCRa/Da7ba/k\nuS8O2m8Wn0W3n8ZvK1SwSsYwviR5fwHzKnJVJs8DhLwLXFUZVk5i9Je1fY1hiY7EIt1IEuwfrXTR\nHzHE0CtFx1p0++1Qwao4sX7xykYM/aiVLkTdUcGKgBim0mpa+2BjicE2b/tYfPcqM8WQkzLEGkP7\n7VDBqjixSDeSBPtHkmB/xBBDrxQda9Htt0MFq+LE+sUrGzH0oyRBUXdUsCIgBhlCkuBgY4nBNm/7\nWHyXQeYqU6xFt69p7UIIIUqPClYLzGx3M5trZneb2TEttq9mZrPN7DYz+4OZfaiAMHsilrEGjWH1\nj1a6qA/qr9aoYDVhZhOAM4DdgC2Bfc1siyazjwF3uvs2wM7AV81sUvY2X/5/UJhppYtB2Wuli5f7\n1EoXxfvN4rPo9vtFBWs8M4B57n6/uy8BLgb2arJxYNXk8arAI+7+wjCCy3uHytt3Hv7rQJ4/DnkX\nuKoyrJzE6C9r+5rWPnimAvMbni9IXmvkDOA1ZvYX4HbgE0OKLTWxSDeSBPunrJJgFvu6o/5qjQpW\nNnYDfu/uGwCvB75pZqtkdSZJsD//kgRb+03jOw2SBOPwW1VJsJO/zOMuFWYhsGHD82nJa40cAHwJ\nwN3vNbM/AVsAtzQ7mzlz5kuPR0ZGGBkZ6Su4vAtEHm1IEuwfSYLxIUkwffvt4hgdHWV0dBSAJ55o\n70cFazw3A5uY2XTgQWAfYN8mm/uBtwG/NbMpwGbAfa2cNRasQZD36gWSBNvbF01ZV7rIYl936tZf\njQfz558PTz55fEs7Fawm3H2pmR0OXE2QTM939zlmdkjY7LOAE4Fvm9kdyduOdvdHs7YpSbA//5IE\nW/vNw/eYz7Tfqxj6rxckCebbfr+oYLXA3a8ENm967ZyGxw8SxrGGjiTBeiJJMD4kCaZvX7MEa4Yk\nwfb+JQm+3FaSYHwx9ErRsRbdfjtUsCpOrF+8shFDP5Z58dsY+k+UHxWsCMg6XpOX37zGGobhP5bP\nGoNt3va9fhdj6JOi2y9TrEW338lGBaviSBIcnH3RSBIUdUcFq2Toh6IYYuhHSYL1Qf3VGhWsCCjT\nVNph+E7rPyYJrOhp2c3+Ysh9mfqvTPtiHae1q2CVDE1rryea1h4fmtaevn1Na68Zmtbe3r/GsF5u\nG1N/xNB/ZUL91RoVrAjIU4bQSheDsY9hpYYyLn6b1l6SYL4+i24/jd9WqGCVDEmC9USSYHxIEkzf\nviTBmiFJsL3/mCSwPNC09vqg/mqNClYESBLsz78kwdZ+8/A95lOSYPF+qyoJdkIFq2RIEqwnkgTj\nQ5Jg+vYlCdYMSYLt/UsSfLmtJMH4YuiVomMtuv12qGBVnFi/eGUjhn7UShei7qhgRUCZdPNh+E7r\nfxhjWEXbpmEY09rT+I6l/2LISdFjSGXqq1aoYFWcNAP1YzJSXpM/xuLJ40e06pJg2okOaT7fmM+0\n/tNQdP/lEUMRkw6ykjbGWPtKBavixPBDUQVi6EdJgqLuqGBFQJlkiGH4TutfkmBrv3n4bvQpSbB3\nJAkOBhWskpHXqb0kwe72RSJJMD40rT19+5IEa4Z+KIohhn6MIYYx9D3MF/VXa1SwIqBMMsQwfKf1\nL0mwtd80vtOudJHGd5n6r0z7Yp6SYF7tp/HbChWskpF3gcijjWZ/RcsTZWRY8pNy0zuSBNO3L0mw\nZmili/b+qzyGlSUGrXRRXtRfrVHBqjBpB+rT+m78X6T/YUiCMSzeqsVvs9v2iiTBfNvvFxWsFpjZ\n7mY218zuNrNj2tiMmNnvzeyPZvbr4cWWv19JgvEhSTA+JAmmb7/fOCb1H0q1MLMJwBnArsBfgJvN\n7GfuPrfBZnXgm8Db3X2hma0zrPgkCbb3L0lwePaSBPNF/dUanWGNZwYwz93vd/clwMXAXk02+wGX\nuvtCAHd/eMgx9oQkwcHZxyBpZSkSkgTTIUkw3/bT+G2FCtZ4pgLzG54vSF5rZDNgLTP7tZndbGb7\nDy06IYSoKZIEszEJeAOwC7AycIOZ3eDu9zQbzpw586XHIyMjjIyMjHOW9xpxac4itNJFe/siyXK2\nrJUu8o2hiEkHWUkb47D7anR0lNHRUQAee6y9HxWs8SwENmx4Pi15rZEFwMPu/izwrJn9Btga6Fiw\niiCvAlE3yviDG9OYVAz9J+Kl8WD+wgvh8cePb2knSXA8NwObmNl0M5sM7APMbrL5GbC9mU00s5WA\nNwNzsjYYwzhQTL7T+h/GGFbRtmmJyXcs/VdkTso2hlX097cdOsNqwt2XmtnhwNWEgn6+u88xs0PC\nZp/l7nPN7CrgDmApMMvd7xpGfHmd2tdREkzrv0gkCcaHprWnb1/T2nPA3a8ENm967Zym518BvjLM\nuEK7+dqL1sTQjzHlPqZYqoj6qzWSBCtMTLJQnv4lCfbvW4vf5uczL7+a1i6iJ+8CkUcbzf6KlifK\nyLDkJ+WmdyQJpm+/3zhUsEqGVrpo77/KY1hZYijzrMK6o/5qjQpWhckyUJ/Gd+P/Iv1nkfjyWtkh\nT0krz9UotNJFfj7z8ltVSbATKlhCCCFKgQpWxdG09vb2af0Xiaa1x0cRZxhZKTpGjWGJrkgSbG9f\nRklLkmB2216RJJhv+2n8tkIFSwghRClQwYqAGC7wlCQ4WPtBI0mwf7T4be/E2lcqWBUnhh+KGKnD\nD24MB0JZ7YVohQpWBMQwDhST77T+s4xh9WqbNZaixmCy+q7DShdF5qRsY1hFf3/boYJVMvI6tZck\nOFj7QSNJMD6GccARq7+s7UsSrBn6oRgMZezHmGKOKZYqov5qjQpWhYlJcsrTvyTB/n3XQRLsBUmC\n+bafxm8rVLBKhiTB1kgSHI8kwXyRJJi+fUmCNUM/FIOhjP0YU8wxxVJF1F+tUcGqMDFJTnn6lyTY\nv29Jgvn5zMtvVSXBTqhgCSGEKAUqWBWnLmNYY77zsM1iP2g0hhUfRZxhZKXoGDWGJbqS5Ucuje/G\n/0X6zyIJlnHxVi1+m922VyQJ5tt+Gr+tUMESQghRClSwKo4kwf5ts9gPGkmC8SFJMH37kgRFW+oi\nCY6RRnYqo6SVp2yXhlj6Lw8kCebbfr+oYAkhKnkGJKqHClYExHCBpyTBwdoPGkmC8cVQ9NlgGtLG\nGGtfqWC1wMx2N7O5Zna3mR3Twe5NZrbEzP55mPGloegf2mFS5YKVJYYYDoSy2gvRChWsJsxsAnAG\nsBuwJbCvmW3Rxu4/gKv6b7NfD5391mEMK8+xo7x8x5SfMq900StF5qRsY1gx9FUrVLDGMwOY5+73\nu/sS4GJgrxZ2HwcuAf42zODSkvasI68j4UZJMC90hjU8+zL2nyg/KljjmQrMb3i+IHntJcxsA2Bv\ndz8LiFrBTjuO0fx4EDT70xhWeoYxhtX8eBC+s9qXgSqPYeXVfr9xTOo/lFrydaBxbKttGmbOnPnS\n45GREUZGRnILqpmYJKe8/UsS7M93GSXBPJAkmG/77RgdHWV0dBSAhx9ub6eCNZ6FwIYNz6clrzXy\nj8DFZmbAOsAeZrbE3Wc3O2ssWEIIIcbTeDB/0UXw6KPHt7RTwRrPzcAmZjYdeBDYB9i30cDdNx57\nbGYXAJe3KlYxoGnt/dtmsR80mtYeH0WfDaah6BglCeaEuy81s8OBqwljfOe7+xwzOyRs9lnNbxl6\nkD2S92oHjf+L9p/ms6btl7S+G/8Pyha00sUwkCSYb/tp/LZCBasF7n4lsHnTa+e0sf3wUIISIkeq\neAYkqodmCVYcSYL922axHzSSBOOj6LPBNBQd46D6SgWrwkgS7N82i+/G/4OyBUmCw0CSYL7t94sK\nlhCikmdAonqoYEVADKs/SBIcrP2gkSQYXwxFnw2mIW2MsfaVClbFKfqHdphUuWBliSGGA6Gs9kK0\nQgUrAmIZB4rFdxb/eY4d5eU7pvyUcaWLtP1WZE7KNoYVQ1+1QgWr4mjx2/5ts9jngRa/FXVHBavi\naPHb/m2z2A+aYYxhNT8ehO+s9mWgymNYebWvMSzRlpgkp7z9SxLsz3cZJcE8kCSYb/v9ooJVcSQJ\n9m+bxT4PJAmKuqOCVXEkCfZvm8V+0EgSjI+izwbTUHSMkgRFV2KSnPL2L0kwXt+x9EkvSBLMt/00\nfluhgiWEqOQZkKgeKlgVRytd9G+bxX7QDEMSLNtKF0VT9NlgGsoQYy+oYFWYLD9yaXw3/i/af5rP\nmrZf0vpu/D8oW9Dit8NAkmC+7feLCpYQopJnQKJ6qGBVHE1r7982i30eaFq7qDsqWBUmixTT/Lib\nfVrfefgfs6uyJDiMmGOKpQySYNGzH8vUfha/rVDBEkLoDEiUAhWsiiNJsH/bLPZ5IElQ1B0VrIqj\nlS76t81iP2iGMa29+fEgfGe1LwNFy5dpKEOMvaCCVWFiWu0gb/956vllGteI0XcsfdILmtaeb/v9\nooJVcSQJ9m+bxT4P8pb4qt5/ovyoYFUcSYL922axHzSSBOOj6LPBOqKC1QIz293M5prZ3WZ2TIvt\n+5nZ7cnfdWa2VRFxdiMmWShv/5IE4/UdS5/0QtUlwUGiae0RYGYTgDOA3YAtgX3NbIsms/uAHd19\na+BE4NzhRinEYKniGZCoHipY45kBzHP3+919CXAxsFejgbvf6O5PJE9vBKYOOcae0eK3/dtmsR80\nw5AEtfhtOoo+w6kjKljjmQrMb3i+gM4F6UDgl7lGlJEsP3KxkEV2qvJKF6DFb4eBJMG42580vKaq\nh5ntDBwAbN/OZubMmS89HhkZYWRkJPe4hEhLFc+ARHkYHR1ldHQUgL/9rb2dCtZ4FgIbNjyflrz2\nMszsdcAsYHd3f6yds8aCVQSa1t6/bRb7PNBKF6KqNB7MX3IJPPTQ8S3tJAmO52ZgEzObbmaTgX2A\n2Y0GZrYhcCmwv7vfW0CMPZFFiml+PKg4Oj3v9B5JguljSGufNvex9F8elGlGaJn6KovfVugMqwl3\nX2pmhwNXEwr6+e4+x8wOCZt9FvB5YC3gTDMzYIm7zyguaiH6Q2dAogyoYLXA3a8ENm967ZyGxwcB\nBw2uvUF56s93GkkwqyQU02fNy3deSBKML4YytJ2FWOOVJFhxtNJF/7ZZ7AeNVrqIj6IluTqighUB\nsawWkcV3XsS0mkKZxjVi9J13//VKkTmJIQ9ZfBfVfjtUsCqOZgn2b5vFPg+0+K2oOypYFUeSYP+2\nWewHjSTB+JAkOHxUsCpMmXeoWGSnPH3HJNvl6TuWPumFottPQ9GxFiGfqmBVHEmC/dtmsc8DSYKi\n7qhgVZw6/VBU/Qc3pphjikXUBxWsCpN1xlUMY1gxyU4xSILDiDmmWMogc5Up1qq0r4IlhNAZkCgF\nKlgVR2NY/dtmsc8DrXQh6o4KVoVJMxW6CpKgFr/NZp9FEoyh//JAkmDx7WuWoBBCiNKjglVxJAn2\nb5vFPg80rV3UHRWsClNmSTBLG5IEs9lLEszWfplirUr7KlhCCCFKgQpWxZEk2L9tFvs8kCQo6o4K\nVsXR4rf922axHzRpZTjQ4rd5U7QkV0dUsCpMnXao2FaNKHoMJCbfsfRJLxTdfhqKjlXT2sXAkSTY\nv20W+zyQJCjqjgpWxanTD0XVf3BjijmmWER9UMGqMFmkmF7ts8SRl/9Gn1WVBIcRc0yxlEHmKlOs\nVWlfBUsIoTMgUQpUsCqOxrD6t81inwda/FbUHRWsCqOVLvq3zeK78f8gbbXSRf5IEiy+fc0SFEII\nUXpUsFpgZrub2Vwzu9vMjmljc7qZzTOz28xsm2HH2CuSBF/O6OhopjhikLSqPK19LC8iLmLLiwpW\nE2Y2ATgD2A3YEtjXzLZostkDeJW7bwocApw99EB7QJLgeEZHR6ORtCQJLmPsh7FMMleZYs1Kp4Kl\nWYJxMAOY5+73u/sS4GJgryabvYALAdz9JmB1M5sy3DCFEKJeqGCNZyowv+H5guS1TjYLW9j0zPPP\n52MLsGBB77YPPAAPPpjOf6/86Edw4olw6aXp3rd0aT62v/tdfnHkxfz53W0amTOnd9snn4QXXsjH\nN6T7HvZK2iP75ZcffAx5seKK9W6/HeYxiPMRYWbvBXZz94OT5x8AZrj7EQ02lwNfcvfrk+fXAEe7\n+/80+VLnCiFEBtx93CHJpCICiZyFwIYNz6clrzXbvKKLTcsOF0IIkQ1JguO5GdjEzKab2WRgH2B2\nk81s4IMAZrYt8Li7LxpumEIIUS90htWEuy81s8OBqwkF/Xx3n2Nmh4TNPsvdf2Fme5rZPcDTwAFF\nxiyEEHVAY1hCCCFKgSRBIYQQpUAFqw/MbAszWyN5rAkWEWBmW+uauPgws53NbMui4xAvp2z7iyTB\nDJjZa4BvAY8mL30C+JO7p7iSRQwSM9sOOD55ugJwkLvPLTAkwUv7yrnAC8BS4GvufkWxUYmy7i86\nw8rGYcBF7r4n8EvgM8D2xYZUX8xsY+BUQk7+Cfhf4GPFRiUSDgN+4u47Af8F7FpwPLWnzPuLClaP\nJJLGmsnTSYTZgQBnATsA7zazV7R8s8gFMzvQzDZy9/uAXd39W8kmB/5sZv9QYHi1xcx2adhXnGXX\nNU4BlprZlmamGcpDpgr7iwpWF8zsfWZ2E/AOYLGZLQfcDcwwszcSzqzmAROBjYqLtD6Y2Y5mNodw\ntD4RwN2fNbPlzewsYCtgbeAcM3trgaHWioZ9ZU/CvmKEtTj/wczuBF4NPA58CdivuEjrRZX2F41h\ntSDZ0SYCBxN2rn9292sbtk8H3ks4s1qdIAkeDvynu3/XzMzVsbmQrKZ/MvA7d/9Ji+1rufujyeOv\nA4+6+xeVk3zotq8kNpsBJ7n7vyTPDycc3H3e3RcPOeRaUbX9RWdYTZjZJA+8APwJ+G7yHzN7v5lt\nkKzk/jXgY+6+i7vfCswFlodwdXFR8VeRRvnI3V8EtgAWmtkKZvYpM3t7sioJYztfwu+BtZLXlZMB\n02Vf+RczG1sQ+iHgMTN7Q/L8AWBdFat8qPL+ooLVgJl9FviRmR2aTFf/T+Be4MdmdhewN3CemZ2a\nvOWvyZfgaOADwA2FBF5hGnJysJmtlxzR/5kgL/0M2AA4EjjLzNYYu7zAzD4BHA38qpjIq00P+8p7\nCPvKCcATwGLguOR9XwZ+k/jR5SADpPL7i7vrLxxMHESYxbQL4V5X/w9YH9gUOAXYJLHbmKDDvyJ5\n/jngWmCLoj9D1f7a5GRNwoyma4HPJXZrAdcDbyFo8WcDlysnQ81Lp31lCrBGkrevA68p+jNU8a8O\n+4vGsHjpKO8c4Kce1gl8FfB/gVXc/ZNmtqK7P9Ng/z3gq+7+ezNbzsONHsUAaZOTDxFmaH4B+AlB\nwviquz9hZrMIY4gXm9n67p7Tnb3qTYZ95fvAqe5+W0Eh14K67C+1lAQTGe8UMzvAzLbwULUXAh8G\ncPd7CQne2Mx2GNsBLXAqsB5wT2KrYjUAeszJpcCWhCP5rwIrA8ea2X8AbwZuTWxLsfOVgQHsK1MI\nUqEYIHXdX2pXsCxca/ATYF3CPa0uMrNNgG8DK5vZjonpfMJp81bJ+/ZInq8CvNfdnxxy6JUlZU5+\nC2zv7qOEsZAHgSXAzu4+b8ihVxrtK3FS5/2ljhfvrQms7WGVCsxsVYKk8WPgMuBTwG/c/REzWwt4\nLnnfPGB/d7+ngJirTpqcrAk8A+DufwNOKybkWqB9JU5qu79U/gzLzKaZ2VFmtqmZLQ/8Bbjbwo0X\nAb5JkPi2AC4BljezL1m41mpLwtEI7n6PdsDBMKiciMGifSVOtL8so9IFy8y+AFwBvBb4LHAoYQHO\nxwl3FV7B3f8M3A7s4uGahI8nNj8E/uDuZxYRe1UZUE7OKiL2KqN9JU60v7ycykqCZjZC0NB3TU6N\njwJecPfFZnYb8CbCYPANBO33LgsXBc8DPmdmJzXOdhL9o5zEifISJ8rLeCp1hmVmm9mye+78l7sf\nnSR6a8K1CK+ycLX9BcDfgQPM7NXAK4EbWbagLVVLdFEoJ3GivMSJ8tKZSlyHZWYrAmcCrycs+/JT\n4Gp3X2CnUAMsAAAIGklEQVRm6xEu7v0D8BRhcPIMd59tZkcCexAucDzZ3S8o5ANUEOUkTpSXOFFe\neqMqBevtwAHuvq+ZbU64FuE54ER3f94aLu41s0OBbd39Q8nzDYEFHtbcEgNCOYkT5SVOlJfeKLUk\naPbSOmQrAOsAuPv/Ej7XTsC7ktcaZ8lsTLKOWbLtgTokelgoJ3GivMSJ8pKOUhassST7stPDB4D7\nzew4CytEr0/Qc19nZismfzub2SXAG4CbCgm8wign8WHh3m2A8hITZrba2GPlJR2lKVhmtrKZHWlm\nrwVWS16bmGz+AzCLcORxITAKXAe8Mhl4XBH4KHCtu7/N3e8cdvxVxMyWM7Nv2rKlYRpRTgrCzFYx\ns68Ae1u4H1IjyktBmNmqFu45dXJj0UpQXnqgFGNYZnYwIVl3AY8Bz7j7p1vYjd2P6jkzm0a4qvuD\n7v6MmU1096XDjLvqmNmbCEd657j7YW1slJMhYmYHEm4fcQ1wrLs/3cZOeRkiZjYF+A5hFZAT3X1R\nGzvlpQPRn2ElUzw3A/Zx9/2A/ybMlBnbbg1y1HNJot9LuPfL9WNTO+ue6Jx4iHD9xy5m9g5YJg0q\nJ8PHwnpyewGXuvuR7v60JTfqS7ZrXymO9YCl7v5xd19kZquPbTCzicpLb0R5hmVma7r7Yw3Pzd3d\nzDYAZhPu7jvL3X/T4r1vBE4Hvuzus4cWdMVpzkny2geBF4FngU+6+3atjgKVk/xosa8cQrjf0Txg\nV8K1On909++2eK/ykhNjeWn47XoL4Qaw5xDOmp4h7Dcf0f7SO1GdYSVHGqcR1snaaey1JOErAkcQ\nlhu5HDjUzI5NbCZZWGtrOXe/1d3fqkQPhjY5GRvMv49wM75LgAlmdgtwTGJjykl+tMpLwtXAJoQb\nKd4NzAH2MbN/T96nfSVHmvPSMLa7BNiOcA3VtYRp6+sQbvsxNh6svHQhqoJFuK32BoQ7ZX4Owmmw\nmU1ITouPc/dT3f2HhCu932rhhnEvEGTCSS0GmUV/tMrJ2BTbVwKPmNk/JTabEhbfHEM5yY9xeQFw\n9z8RBu9H3P00d/824S6/b7aw7pz2lXxpl5dbgDuB9wGj7r6YcIfgfcxsjWSfehrlpSNRSIINp82T\ngamE+7hcCfzI3We1kZk+Cazs7icUEHLl6ZaTxGZbwn2Pfku4u+mJwBPufmgxUVefXvLS4j2fBlZw\n9xOHGGqt6HF/mQZcBHyNsJLFdsCBwKHu/lxrz6KRWApWq4K0B3Ay4eZjTyeDkssBWwOHkKxe7O6/\nHnrANaDHnKwKbJ4cPZKMMb7B3a8YfsT1IMW+AuHWEkcS9pV/83ATP5EDveQlee1dwBsJd/xdDzjB\n3X8y7HjLSiEFy8LSIjcA93mLu5E2HK1cCPzV3Y8eex04F7hfZ1aDJWVOFrn7ZxKp9sVk+2R3f37I\nYVeeLPtKw2unE3J10rDjrjpZf8Matu/g7v89pHArw1ALloUp6t8DFgILCDLFh5Jt3wbOc/frGuzX\nJ9wL5nLCxcJfAJ7zly9TIvqgz5ysBHzN3f865LArT595WRWYCTyrfWWwDGB/+Ya7Lxxy2JVh2IN7\n6wI3uvs7gU8Da5vZKcm2YxoTnbAe4crvvYHL3P0p7YADp5+cXK5ilRv95OWn7v6k9pVc6Hd/UbHq\ng1wLlpmtYWZvapgGvQXLbqP9FOHOmAeZ2VRvuvLbzNYG/p0wTrWNTp8Hg3ISJ8pLnCgvcZGbJGhh\nOaUTgFuAh4FjAU+ev9bdH0nsTgPWbDit/gjhPjDzx3TgXAKsIcpJnCgvcaK8xEcuZ1hmtgLwFmAH\nd38HYSXifwOeBH5AuE5kjAuBiWa2RvL8eeB5JXqwKCdxorzEifISJ7kULHd/lpDsKclLFwKPAIcB\nRwNbm9n7km2bAI+7++PJe7/r7ouU6MGinMSJ8hInykucDLRgmdkEW3aV9rcIC3Hi7vMIU0A3AtYG\nDgd2NbNfEU65a3lvl2GgnMSJ8hInykvc9FWwzGyzxufu/qIvu/PldcAaZva25PndhBk2a7r7lYR1\nAb8C/KO7f6+fOMQylJM4UV7iRHkpF5kKlpltY2Z/Bq4ws42atp2cnCr/Efgf4EAzm+Tu9xFuQjYV\nwnp07n5VMtNG9IlyEifKS5woL+Uk1SxBS5YfMbMPAKsAbwVuBc70ZJUDCws5Pj72GDgTmAysTLhw\nbj9dizA4lJM4UV7iRHkpNz0VLAu3oj8BmAT8HJjr4SZk2xLWyvqku9/W5r3LEQYvN3f3cwcWec1R\nTuJEeYkT5aUadJUELdxr51ZgTYKGewqwOYC73wjcBuzfMKVz7H17m9mM5LT5N0r04FBO4kR5iRPl\npTr0Mob1IvBVdz/M3c8DbgT2aNj+NcLqw1sC2LJbP08kXLMgBo9yEifKS5woLxWhqyRoZisBS4EX\nEu13X+D1HlaFnuTuLyR68PsJBfAhdz8g98hrjHISJ8pLnCgv1aHrGZa7L3b353zZvV52I9ycDA93\nL4VwZLI7cLsSnT/KSZwoL3GivFSHSb0aJoOWTrjy+xfJa68mTPN8CtjM3f+cQ4yiDcpJnCgvcaK8\nlJ+ep7WbmRGmdp4HXAZ8BHgQ+Iy7P5ZbhKItykmcKC9xoryUn7TXYW0LXJ/8XeDu5+cVmOgN5SRO\nlJc4UV7KTdqCNQ3Yn3CX2edyi0r0jHISJ8pLnCgv5Sa3+2EJIYQQgyTXOw4LIYQQg0IFSwghRClQ\nwRJCCFEKVLCEEEKUAhUsIYQQpUAFSwghRClQwRJCCFEK/j8ww3QMt6Nd+wAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f0afce19e80>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "data = pd.DataFrame([requests.get(sync_url).json() for i in range(30)],\n", | |
| " columns = ['A','B','C','D']).applymap(pd.Timestamp)\n", | |
| "\n", | |
| "def show_processes(data):\n", | |
| " x = pd.Series(0, index=pd.date_range(data['A'].min(), end=data['D'].max(), freq='ms'))\n", | |
| " for i, row in data.iterrows():\n", | |
| " x.loc[row['B']:row['C']] += 1\n", | |
| " x.plot()\n", | |
| " plt.ylim(0,plt.gca().get_ylim()[1]*1.2)\n", | |
| " return \"{} ms / query\".format(((data['D'].max() - data['A'].min())/len(data)).value*1e-6)\n", | |
| "\n", | |
| "show_processes(data)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Call asynchronoulsy the synchronous service\n", | |
| "\n", | |
| "Well this is dangerous, because you send several query in (almost) the same time and this may bother every CPU of the server machine, so that they won't be able to run other services. In particular, they will be unable to execute `LongQueryHandler.get` thus leading to a timeout." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>A</th>\n", | |
| " <th>B</th>\n", | |
| " <th>C</th>\n", | |
| " <th>D</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2016-04-01 21:00:17.683005</td>\n", | |
| " <td>2016-04-01 21:00:17.684445</td>\n", | |
| " <td>2016-04-01 21:00:17.784666</td>\n", | |
| " <td>2016-04-01 21:00:17.785753</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2016-04-01 21:00:17.470840</td>\n", | |
| " <td>2016-04-01 21:00:17.476081</td>\n", | |
| " <td>2016-04-01 21:00:17.576318</td>\n", | |
| " <td>2016-04-01 21:00:17.577349</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2016-04-01 21:00:17.578429</td>\n", | |
| " <td>2016-04-01 21:00:17.579734</td>\n", | |
| " <td>2016-04-01 21:00:17.679985</td>\n", | |
| " <td>2016-04-01 21:00:17.681428</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2016-04-01 21:00:17.474189</td>\n", | |
| " <td>2016-04-01 21:00:17.476277</td>\n", | |
| " <td>2016-04-01 21:00:17.576459</td>\n", | |
| " <td>2016-04-01 21:00:17.577844</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " A B \\\n", | |
| "0 2016-04-01 21:00:17.683005 2016-04-01 21:00:17.684445 \n", | |
| "1 2016-04-01 21:00:17.470840 2016-04-01 21:00:17.476081 \n", | |
| "2 2016-04-01 21:00:17.578429 2016-04-01 21:00:17.579734 \n", | |
| "3 2016-04-01 21:00:17.474189 2016-04-01 21:00:17.476277 \n", | |
| "\n", | |
| " C D \n", | |
| "0 2016-04-01 21:00:17.784666 2016-04-01 21:00:17.785753 \n", | |
| "1 2016-04-01 21:00:17.576318 2016-04-01 21:00:17.577349 \n", | |
| "2 2016-04-01 21:00:17.679985 2016-04-01 21:00:17.681428 \n", | |
| "3 2016-04-01 21:00:17.576459 2016-04-01 21:00:17.577844 " | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "data = pd.DataFrame([x.json() for x in grequests.map(list(map(grequests.get,[sync_url]*4)))],\n", | |
| " columns = ['A','B','C','D']).applymap(pd.Timestamp)\n", | |
| "\n", | |
| "data" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'78.72825 ms / query'" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n31dzXwAAAABJRU5ErkJggg==\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f0b1c397ef0>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "show_processes(data)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "This works because I have 4 CPU on my machine, but if you send 10 queries simultaneously, you'll get timeouts." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "[<Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>,\n", | |
| " <Response [200]>]" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "grequests.map(list(map(grequests.get,[sync_url]*10)))" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Call synchronoulsy the asynchronous service\n", | |
| "\n", | |
| "This is possible and works well." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'112.10326599999999 ms / query'" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAEUCAYAAAB3UQK0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXu4ZEV1t981DIgC8YKKchu5IygXNcRElAOog8rnaJQI\nRIwoFyEoxggkUWQIeMEIoiLgCEiQmxcUwQAihPMBiSiKiCDICF8Qh0vCRT5Q0GFY+aP2gZ6e0927\ndu/qXbv79z7PeWa6e/WqVbV299r7V9W1zd0RQgghcmdO0wEIIYQQZVDBEkII0QpUsIQQQrQCFSwh\nhBCtQAVLCCFEK1DBEkII0QpUsLows1PN7F4zu6HH63ua2c+Kv6vN7KWjjlEIISYRFawV+Qowv8/r\ntwOvcfetgaOBL48kKiGEmHDmNh1Abrj71WY2r8/r13Q8vAZYJ31UQgghdIU1HPsAFzcdhBBCTAK6\nwqqIme0I7A1s38dG+14JIUQF3N26n9MVVgXMbCtgEfBmd3+wn6276y+DvyOOOKLxGPSnfOT6l1s+\neqGCNTtW/K34gtn6wHnAXu5+20ijEkKICUaSYBdmdjYwBaxpZr8GjgBWAdzdFwGHA88BTjQzA5a6\n+3ZNxSuEEJOCClYX7r7ngNf3BfYdUTiiJqamppoOQXSgfORFW/Jh/fRCMRxm5hpfIYSIw8xwLboQ\nQgjRVlSwhBBCtAIVLCGEEK1ABUsIIUQrUMESQgjRClSwhBBCtAIVLCGEEK1ABUsIIUQrUMESQgjR\nClSwhBBCtAIVLCGEEK1ABUsIIUQrUMESQgjRClSwhBBCtAIVLCGEEK1ABUsIIUQrUMESQgjRClSw\nhBBCtAIVLCGEEK1ABUsIIUQrUMESQgjRClSwhBBCtAIVLCGEEK1ABUsIIUQrUMHqwsxONbN7zeyG\nPjafN7PFZna9mW0zyviEEGJSUcFaka8A83u9aGZvADZy902A/YGTRxWYEEJMMipYXbj71cCDfUwW\nAGcUtj8Enmlma40iNiGEmGTmNh1AC1kHuLPj8ZLiuXtnMz766MEOX/ACuOeewXbLlsHcueA+2Hbr\nreGGG8rZuoPZYLsnnoCVVirnc5tt4PrrB9vNmQN77AHnnhv6N4gFC+Dqq+H++wfbbrQRvOIV8LWv\nDbY1gw02gNtvH2y7bBmsvHIYj0G8+c3B5403DrZday1405vgK18pN8a77w7f+Q48+uhg2+23D2N9\n5ZWDbVddFd75TjjttHJ93G23kOvFiwfbrrce7LADnHnmYFuAvfeGiy8u9/nYYgt42cvK+TaDv/kb\n+OY34ZFHBtv/2Z/B6qvD5ZcPtl1lleD7tNPKHdNveQtcdx38+teDbTfZJHy2vvGNwbZmsN9+8PWv\nw4P9TsELtt02fBddfPFg27lz4cADYdEieOyxwfaveQ0sWQK33TbYds01+7Q7+O1iGC69dOGT/583\nb4p586aWe/3734cf/SgctFtu2d/Xxz8e/v3IR/rbXXMNfOEL8Nznwlvf2t/2yivhqqvgPe+BF76w\nt93SpfDpT8OLXwx/+Zf9fV50EZxwQvhw7bBDf9szzwwH/Omnw7ve1d/2qqvgD38IJwH/9E/9i+yD\nD4Yv/gMPhAsvhNe9rr/vr389fOHuthtsuml/249/HNZYAz7wgcHxPvYYXHIJbLUVrL12b9ulS4Pf\n1VeHs84aPMYXXxzG4rjj4O/+rr/tL34RTl7mzoXf/x5e8pL+9p/+NKy2Whi/d7yjv+3ll4cv6FNO\ngZ137v9l88gj4bj853+G884Lxbkf558PL3oRfPCDcMAB8LSn9ba95x741rfCF/S3vgVvfONg3895\nDhx6aPjrx+LF4TP1whfCXXeFL/Z+HHdcOD5OPhn22qu/7ZVXwuOPw0knhRO31VfvbXv//XDGGbDP\nPvDd78JrX9vf99e+Fr5TDjpo8HfGHXfAZZeFYnjTTaFA9+OUU8J3wZFHwsEH97e98Ua4+eYwhvPn\nh3Ffsf1p7rhjGvdwQtoTd9df1x8wD7ihx2snA+/oeHwLsFYPWx/Ehz7kDu7nnjvQ1MF97bUH2x17\nrPvzn+++556DbY88Mvj98Y/72/3ud8Fu990H+3zf+9zXWsv9Yx8bbLvTTu6HH+6+ww6DbY86yv2j\nHw1xDOJXv3LfcEP3z3wmjPEgFiwIfi+4YLAtuG+1Vbl4P/IR95e/3P3aa/vb/v737quu6n722eXG\n+IADwli84AWDbb/2NffddnPfYw/3s84abL/uuu4nnui+666DbQ85xP2YY9w32cT9l7/sb3vPPeG4\nPPlk9/32G+z7r//a/atfdV9tNfeHH+5ve9117ttu637SSe777z/Y9557hj6uscZg2wsvdH/Tm9z3\n2cf9y18ebL/ppsH3jjsOtl240P2II8K43HNPf9tf/jKM8zHHhHEfxK67un/72+5z5gy2veKK8Bk8\n+GD3z352sP3LXuZ+/vnhWBnEWWeF8d5ww/C57McTT4TPV/HducJ3quawZseKv9m4AHgXgJm9Evit\nu88qBwohhKgPSYJdmNnZwBSwppn9GjgCWIVQ8Re5+0Vm9kYz+xXwO2Dv5qLtTZk5kFzaT2mbwziU\njSE23pRjkcp3lTg0fvnFkdp3L1SwunD3PUvYHFRXezPzMGUWPcT49JILKcq2HxNnbPuxsZah07bO\ncYghJoYq8VYZtyZ9V81JKt+TMH5t7uNsSBIUQgjRClSwWkaMdNAk4y4JppBwcpJkcpK0NH75xZHa\ndy9UsMYUFazxJ+VYTMI4T8L4jVsfVbAaJnbupO75mFRzWLnYpvCdIoaU8ebiO7c5rBRxpPSdSxyp\nffdDBatlSBJMF0cKv5J7ho9D45dfHKl990IFa0xRwWp+DFIzbnLPqJmE8Ru3PqpgNYwkwbS2KXyn\niCEnSSY3SSul70kYvzb1cZCNCpYQQohWoII1pjQtSeQg86Vc1p4ihpzmEHKag9H45RdHat+9UMFq\nmFgpqqxP92YlwZj2U9nO9v9B9nXnoWwMVeJNORYpfOcmCU7C+LWtj4NsVLCEEEK0AhWslqFl7XG2\nWtael29JgsP5ziWO1L57oYLVMHVKUJ0+Yw+OulfHxcp8Zaly0MeMsSTBQC6SVox9rO8qfSzbflnf\nMe209Rjp1U4VGxWsTKizYMTYpmi3CimX0tbV/jD2baKNfRtVzHW308axhuZOAlWwWoYkwXRxpPAr\nuWf4ODR++cWR2ncvVLDGFBWs5scgNSn7N+5jB5MxfuPWRxWsholdTp1KOqt7WXsutil8p4ghZby5\n+M5tWXuKOFL6ziWOUfmeDRUsIYQQrUAFa0xpWpLIQeZLuaw9RQw5zSHkNAej8csvjtS+e6GC1TCx\nUlRZn7HLWeuWBGOXtTe9TDdVHsrGkNOS5VS+c5MEJ2H82tbHQTYqWEIIIVqBClbL0LL2OFsta8/L\ntyTB4XznEkdq371QwWqYFD8cnLlcTxFHKpmvLFUO+qZ+5NhWuQfykbRi7GN9V+lj2fbL+o5pp63H\nSK92qtioYGVCnQUjxjZFu1VIuZS2rvaHsW8TbezbqGKuu502jjU0dxKogjULZraLmd1iZrea2WGz\nvP4nZnaBmV1vZj83s3ePKjZJguniSOE3tcwSY5uDb0mCw/nOJY7UvnuhgtWFmc0BTgDmA1sCe5jZ\n5l1mfwvc5O7bADsCx5rZ3NFG2h8VrObHIDUp+zfuYweTMX7j1kcVrBXZDljs7ne4+1LgXGBBl40D\naxT/XwO4390fr9JY7HLqVNJZ3cvac7FN4TtFDCnjzcV3bsvaU8SR0ncucYzK92yoYK3IOsCdHY9/\nUzzXyQnAFmZ2F/Az4OARxSZJUJJgZdscfEsSHM53LnGk9t0LFaxqzAd+6u5rA9sCXzSz1RuOaTlU\nsJofgyrk0r82jl0skzB+49bHrOZdMmEJsH7H43WL5zrZG/gkgLvfZmb/D9gc+HG3s4ULFz75/6mp\nKaamppZ7PdWy9lTvaXo1XxXasKw9NoaUkkyVOMrY57asvUocMe3nsKw91rasfRXbfvbT09NMT08D\n8HifyRUVrBW5FtjYzOYBdwO7A3t02dwBvBb4DzNbC9gUuH02Z50Fqx9a1l7eRsva09LGvmlZ+2ip\n+3uo82T+mGNg2bIjZ7VTwerC3ZeZ2UHApQTJ9FR3v9nM9g8v+yLgaOB0M7uheNuh7v7AaOKr1y4V\nOch8denmw8ShOazh48hlrHPwPWNbtmC0sY/9UMGaBXe/BNis67kvdfz/bsI81tCkkgRjD466JcGy\nH6rYWKsc9G2RBKuMWyq5p0r+2iYJVhm/su3HFJWy7aQ+nmJ8Q5o+DrLRootMyF0STI0kwXxoY98k\nCY6Wpk4CVbBaRtNSX1lykMGq2NftV5JgnnG01XcucaT23QsVrIZp2yrBGF9NS4JlparueOpiUiTB\nsr4lCQ7XjiRBFaxskCRY3kaSYFra2DdJgqNFkqAoRdOSYIr2JQnG+61im4PvXOJoq+9c4kjtuxcq\nWKJxcvhCz4Vc+pfL2LW1jxq/NKhgNUzb5rCalu6q0KY5rJS2Ze1jbEc1hxVD08dojO+YdkZxPJW1\nr2JbJZZuVLAyYZLnsFIuNCh7FphqDquNkmCVhTBNS1ozMacev5i8lyE27lxku5hjpEpueqGC1TJy\nkRrqJIcv9FianhtLGUNq3zG0tY8avzSoYDVM2yTBGF+5XOFJEoyLI8Z2FJJgStlJkmA131Vsq8TS\njQpWJkyyJAj5fMmksm8TbeyblrWPFi1rF6XIRWqoEy1rj/dbxTYH37nE0VbfucSR2ncvVLAaRpJg\n+i/0NkmCKReglI0D0vhOOR692qnDd5X2U8Sd+niK8Q1pc9MLFaxMkCRY3kaSYFra2DdJgqNFkqAo\nRdOSYIr2JQnG+61im4PvXOJoq+9c4kjtuxcqWKJxcvhCz4Vc+pfL2LW1jxq/NKhgNUzb5rCalu6q\n0KY5rJS2Ze1jbLWsfTjfMe1oWbsKVjZM8hxWyoUGMb/GjyFmYjqHK8hUuxjE+k41HjMxpx6/mLyX\nITbuXGS7mGOkSm56oYLVMnKRGuokhy/0WJqeG0sZQ2rfMbS1jxq/NKhgNUzbJMEYX7lc4UkSjIsj\nxlaS4HC+Y9qRJKiClQ2TLAlCPl8yqezbRBv7pmXto0XL2kUpcpEa6kTL2uP9VrHNwXcucbTVdy5x\npPbdCxWshpEkmP4LvU2SYMoFKGXjgDS+U45Hr3bq8F2l/RRxpz6eYnxD2tz0QgUrEyQJlreRJJiW\nNvZNkuBokSQoSiFJMJ3vFH4lCeYZR1t95xJHat+9UMGaBTPbxcxuMbNbzeywHjZTZvZTM7vRzK6o\n3lb1OOv0KUkw3jbGlyRBSYLDtiNJEObGNTf+mNkc4ARgZ+Au4Foz+46739Jh80zgi8Dr3X2JmT23\nmWiFEGJy0BXWimwHLHb3O9x9KXAusKDLZk/gPHdfAuDu9w3baFNXWrHtppDYUl5VxPwaPwVtlASr\nXPU2LWnNxJx6/GKuPsoQG3cusl3MMVIlN71QwVqRdYA7Ox7/pniuk02B55jZFWZ2rZntNbLoxpBc\ndnfIgVzGIpdxbmsfNX5pkCRYjbnAy4CdgNWAH5jZD9z9V92GCxcufPL/U1NTTE1NLfd62+awUqzm\nS70wok1zWClty9rH2Kaewypr26udOnxXbT+HOaxY27L2VWz72U9PTzM9PQ3Ao4/2fr8K1oosAdbv\neLxu8VwnvwHuc/fHgMfM7Epga6BvwerHJC9rb6MkGCMNSRKsZjtjXwZJgsPFEeu7bkmw82T+C1+A\nxx47clY7SYIrci2wsZnNM7NVgN2BC7psvgNsb2YrmdkzgD8Dbh5FcLlIDXWSiwwWQ9PL5VPGkNp3\nDG3to8YvDbrC6sLdl5nZQcClhIJ+qrvfbGb7h5d9kbvfYmbfA24AlgGL3P0XVdprmyQY46vpKzxJ\ngtXiiLGVJDic75h2xlkSLGujgjUL7n4JsFnXc1/qevwZ4DN1tTnJkiDk8yWTyr5NtLFvo4q57nba\nONbQ3EmgJMGWkYvUUCcpZbCmpbs2zmGl9J1LHG31nUscqX33QgWrYSQJpv9Cb5MkmHIBStk4II3v\nlOPRq506fFdpP0XcqY+nGN+QNje9UMESQgjRClSwMqGpK63YdlNIbG1c1l6WNkqCKZe1z9jXbdv2\nZe2xccTYp/Bd97L2sqhgicbJZSl3DuQyFrmMc1v7qPFLgwpWw7RtDqvp1XwxtHEOK6VtWfsYWy1r\nH853TDta1q6ClQ2TvKy9jZJgjDTUtFwWG0duMlUZJAkOF0esb0mCohS5SA11kosMFkPTy+VTxpCT\n71ziSOk7lzhy8t0LFayGaZskGOOr6Ss8SYLV4oixHYXvSZEEY+Jo0zESay9JsAVMsiQI+XzJpLJv\nE23s26hiTlmE2kRTJ4EqWC0jF0msTlLKJ01LdznM74wiDvVxON+5xJGL716oYDWMJEHtdNFpM847\nXczYpOhjr5jqiiO2/dgFGjmMdYxvSJubXqhgCSGEaAUqWJnQ1JVWDhp6G5e1l6WNUlJuS63LoGXt\nw8UR61vL2icUSYLplwBLEoyLA/KRqSQJzh5Hm46RXu1UsVHBEmPLOC5QEWKSUcHKhLZIgimKgCTB\n5e1T2bZVpiqDJMHh4oj1LUlQTCy57AqQA7mMRS6+c4kjpe9c4sjJdy9UsBqmbXNYTf/AN4Y2LmtP\naVvWPsY2lz72iqnOOGLbb+NYl7WvYlsllm5UsDKhzoIRY6tVgsvblyVGGmpaLouNIzeZqgySBIeL\nI9a3JEFRinGUxHKRT2JIFUcuY5GL71ziSOk7lzhy8t0LFayGaZskGOOr6Ss8SYLV4oixzaWPvWKq\nM47Y9ts41mXtq9hWiaUbFSwhhBCtQAUrE9qyrD0FbZzDKksO8zuxceQ2r1IGzWENF0esb81hTSiS\nBNPr/W2SBFMW77JxQD67L6TcTaFKH8u2H1vcchjrGN+QNje9UMGaBTPbxcxuMbNbzeywPnZ/amZL\nzewvRxmfKEcuCzSEEPWggtWFmc0BTgDmA1sCe5jZ5j3sPgV8r5526/AS7zO23RRFQJLg8vapbNsq\nU5VBkuBwccT6liSYD9sBi939DndfCpwLLJjF7v3AN4H/HmVw40guS4BzIJexyMV3LnGk9J1LHDn5\n7oUK1oqsA9zZ8fg3xXNPYmZrA29x95OAoc7N2zaH1fSS4Ri0rL1aHDG2ufSxV0x1xhHbfhvHuqx9\nFdsqsXQzN645UXA80Dm31XOIFy5c+OT/p6ammJqaShZUW0l5Ntr0FVkOctko4lAfh/OdSxxN+Z6e\nnmZ6ehqAhx7qbaeCtSJLgPU7Hq9bPNfJK4BzzcyA5wJvMLOl7n5Bt7POgtWPtsxhpSD1yrgy5DAO\nkIeUFDuvEkuqOayUccS2k2oOK5YcjpEyY9Z5Mn/qqfDww0fOaqeCtSLXAhub2TzgbmB3YI9OA3ff\ncOb/ZvYV4MLZilUZ2iYJxvhqumBKEqwWR4xtLn3sFVOdccS238axLmtfxbZKLN2oYHXh7svM7CDg\nUsIc36nufrOZ7R9e9kXdbxl5kEIIMYGoYM2Cu18CbNb13Jd62L6njjYlCQ6207L24WzbutS6DFrW\nPlwcsb61rH1CkSSYft6mTZKgdrqoZtsrprriiG1fO10MbqeKjQqWGFuaXiEohKgXFaxMkCQ42E6S\n4HC2bZWpyiBJcLg4Yn1LEpxQJAlKEuy0kSRYzbZXTHXFEdu+JMHB7VSxUcESY4skQSHGCxUs0Tja\n6WJ5+1S2bfWdSxzq4+h890IFKxM0hzXYLrWMkwPa6aKabZX8aaeL6sTOYdWFClbDaA6rvna70U4X\n1eKIsc2lj71iqjOO2PbbONZl7avYVomlGxUs0TiSBJe3T2XbVt+5xKE+Due7DlSwMkGS4GA7SYLV\nbWPISaaSJDgcORwjkgTHCEmC9bVbRxuSBONsc+ljr5jqjCO2/TaOdVn7KrZVYulGBUsIIUQrUMHK\nBEmCg+2qSILa6SI+jliZKoc+zsSsnS6qxRHrO1YS1BzWmCBJUDtddNpop4tqtr1iqiuO2Pa108WK\ntmWRJCgmlqZXCQoh6kMFS0SRogBoWfvy9qls2+o7lzjUx+F814EKViZoDmuwXVWJqAw5jANoWXtV\nWy1rHy6OWDSHNaHk8uVb9j1NLxmOJbbANT2HldK2rH2MbS597BVTnXHEtt/GsS5rn9JWc1giayQJ\nLm+fyjaHOFL6nhS5bBL62AsVrEyQJDjYLlYSbOrKahgkCVazlSQ4XByxSBKcUNomCcb4yqVgShKM\niyPGNpc+9oqpzjhi22/jWJe1T2krSVBMLE1LgkKI+lDBygRJgoPtqkiC2ukiPo5YCSeHOZiZmMd9\np4sY31VstdOF6IskQe100WnTxp0uYncx0E4XyxPbx7YdI7G2kgQjMbNdzOwWM7vVzA6b5fU9zexn\nxd/VZvbSJuIUg5EkKMT4oILVhZnNAU4A5gNbAnuY2eZdZrcDr3H3rYGjgS+PNsrxIhf5KQVtlART\nxpHSt5a1D2+bSx97oYK1ItsBi939DndfCpwLLOg0cPdr3P2h4uE1wDpVG6u6Eqounzm0n3pZe9Pj\nEBNDDnJP6py0sY8pfU/C+EkSTMc6wJ0dj39D/4K0D3Bx0oiEEEIwt+kA2oyZ7QjsDWzfy2bhwoVP\n/n9qaoqpqankcbWNXOSTFOQis+QSR0rfkgSHt22qj9PT00xPTwNw33297VSwVmQJsH7H43WL55bD\nzLYCFgG7uPuDvZx1Fqx+aFn7YLs2LmuPpY07XeTwhVslf23d6aJtx0gZ286T+XPOgQceOHJWO0mC\nK3ItsLGZzTOzVYDdgQs6DcxsfeA8YC93v22YxrSsvb5262ij6TmslLZl7WNsY+f+RjGvmHL8YtpP\ncdy18RiJte1npyusLtx9mZkdBFxKKOinuvvNZrZ/eNkXAYcDzwFONDMDlrr7ds1F3W5yOZtPQS5S\nUi5xpPQtSXB421z62AsVrFlw90uAzbqe+1LH//cF9q2zTUmCg+0kCVa3jcEMnngiXRySBJf3l8P4\nxVK3JFgWSYINI0mwvnbraEOSYJytJMHhfMe20cZjJNZWy9rFxNK0JCiEqA8VLNE4uej9KchlXiCX\nOFL61hzW8La59LEXKlgNU1X2qMtnDu1rp4unbCZhF4M29jGl70kYP+10IYQQYqJQwRJRpJDYcpFP\nUpCLzJJLHCl9SxIc3jaXPvZCBSsTtKx9sJ2WtVe3jSF2GXIOX7ha1j68bQxa1j6htG1Ze9NLhqug\nZe1xccTYaln7cL5j22jjMRJrqzkskTW5nM2nIBeZJZc4UvqWJDi8bS597IUKViZIEhxsJ0mwum0M\nkgSHb0eSYDXbQahgNUzbJMEYX7kUTEmCcXHE2EoSHM53bBttPEZibSUJiomlaUlQCFEfKliicXKR\nn1KQy7xALnGk9K05rOFtc+ljL1SwGqaq7FGXzxza104XT9lMwi4GbexjSt+TMH7a6UIIIcREoYIl\nGicX+SQFucgsucSR0rckweFtc+ljL1SwGiYHSa7p9nORTzr/rYNcZJZc4kjpW5Lg8Laz/X/UcQxq\nXwVLCCFEK1DBEo2Ti3ySglxkllziSOlbkuDwtrn0sRcqWJlQpxQV4zNFu7Fop4unaNsuBlXi0E4X\ny/vLYfxiif1sqWCNCU0VqpRxVJlDS0lMG03PYaW0LWsfYxs79zeK+dWU4xfTforjro3HSKyt5rBE\n1uRyNp+CXGSWXOJI6VuS4PC2ufSxFypYonFy+XDnQA5yT+o42tjHlL4nYfxUsMaEHJaVt6X9HOWn\nMj5TxJBS7mljTkbRx5S+J2H8JAkKIYSYGFSwZsHMdjGzW8zsVjM7rIfN581ssZldb2bbjDrGcWIU\n8sn09HTcG2sil3mBXOKYsb/11ulkvlPZ5jR+ddteddV0Vn3shQpWF2Y2BzgBmA9sCexhZpt32bwB\n2MjdNwH2B06u3t7y/9ZBLlJYDr+Yn7EfVLBykQQnYReDsgUrpz6m9J3DThf/8R/Ty72vqTgGta+C\ntSLbAYvd/Q53XwqcCyzoslkAnAHg7j8Enmlma402TCGEmCxUsFZkHeDOjse/KZ7rZ7NkFpskrLrq\nKFrpzZwER8zDD6exBbj11jj7sqyySjm7xYvj5JCYeGPG4oEH4L77ytvffXd529gxjrGP9X3ddeVt\nY/r48MNx9qlsId34PfYY3HFHGt+xn9temLdt3W9izOxtwHx33694/E5gO3f/QIfNhcAn3f0/i8eX\nAYe6+3VdvjS4QghRAXdfQRyc20QgmbMEWL/j8brFc9026w2wmXXAhRBCVEOS4IpcC2xsZvPMbBVg\nd+CCLpsLgHcBmNkrgd+6+72jDVMIISYLXWF14e7LzOwg4FJCQT/V3W82s/3Dy77I3S8yszea2a+A\n3wF7NxmzEEJMAprDEkII0QokCQohhGgFKlhDYGZ7mtnOTcchAma2hZmtWfxfC14axMzeYGZbFv9X\nLhrGzDY3s2cV/29tPlSwKmBmrzKzbxPmrv676XgmHTPbwMxuAL4AfNfMtgBWajisicXMtgfOB/Yx\ns7mueYfGKE7irgGOA842s01o8WdDBSsSM1sDuAr4ibu/zt1/3nRMgl2Bb7j7zoQVnO8DXt9sSBPN\nasA5wB+Bv4J2n9W3nAOAc9z9jcDFwCHA9s2GVB0VrJKY2Xpmtrq7PwwcD2xRPH+wmb3dzDZqNsLJ\nosjH04uH6wEvLP5/PGF3kr8ws3mNBDdhFLl4WsdTywADbga2N7On6SprdBT5eEbxcFXCSmaAk4BX\nA282s/VmfXPmqGANwMzeambXA58FzgZw9w8B/8fMlgDbADsApxRSiEhIVz7OLZ6eBv5gZhu4+6PA\nFcAzgJc2E+Vk0CMXEE4evgd8C3gI+LyZ7ddAiBNFRz6OB75aPH0TsJ2ZvZxwZbWYIAlu0EyUw6GC\n1Qcz2wo4FPh7d3878CIz26l4+W3Ah919b3d/P/AzQuGS/JGIWfKxYfFBvJNwVr8jgLtfCzwdeFHx\nPuWjZmYDCcGjAAAMFUlEQVTJxUZmtkPx8h8J478hQa59O/Db4n36zklAVz7eBmxmZtsCXwduAT4K\nfAw4EvgTYF7xvlZ9NnTwdGFma5jZO8xsZcKWS9cA02b2J8CtFFswuful7n5Ox1tvANYsXpP8URMD\n8rGYsMvIz4GfAFub2fzirddRfCiVj3oo8dmY2cZ1FeBA4JvF3/EUV7vu/sTIAx9TBuTjl8Aj7n6X\nux8HHOjuO7n7TwgF7GnQvs+GClYHZvZ+4BfA3xPG5i7gBcBZwM+BlYHPmtlJXe87GPgwcNlIAx5z\nSuRjJeBEMzuWsNjieuCLZnYUsBC4vIGwx5KSn43Pm9mnCF+cZwJbuvuRwI+BG9t2Np8zJfIxF/ic\nmX0JwN3vNrNVzexQ4J3ADxoJfFjcfeL/CGd/NwCnATsDPwXWKl57OvCPwAHF47UIV1mbEs4kPw98\nF9i86X6My1+FfNwFbFY8fi1wMPDSpvsxDn8Vc7FJl4+Vmu7HuPxV/a4qHh9OOIlr7XeVrrAC/wMc\n4u7vcffLgduBdxSvLQWeRZi8xMMmt9PAxu7+R+Bod9/V3W8ZfdhjS2w+/h3YrHh8mbt/zvVzg7qo\nkovN4an5EXdfNuqgx5jYfFxBkQ/gU+6+c5u/qyZy89tiCe4RhOXPV7v7DcA9xWvPoNB/Adz9cTN7\nFPiHYhn1DsCLCYsscHf9cHhIasjHFoQ5LDEkNeXiuuL1Vs2P5Eidnw0Pd1BvNRN3hWVmbydo6s8m\nrJaZ7nhtjrv/HngcmN/xtiOBS4D3AmsAO7v7Cve/EvEoH/mgXOSF8rEiE7Vbe3G2sitwp7v/qHju\nImAfd7/LzFZ296VmtjlwOvBWd7+74/2ruvtjTcQ+jigf+aBc5IXyMTtjf4VlZuua2YeKPbSecPfz\n3P1HZvY8M/u/hLsLf9jMntdxyTwHuI0uyXQcD4BRo3zkg3KRF8rHYMa6YJnZxwgr+LYE/oGwemxm\nMngecB7wcsJl9VEW7jAM4QDYluK3CqIelI98UC7yQvkox1hKgmY2l5Dc3YBPuvv9ZvZ3wGPuflJh\ns9LM6qVi8vI24NXu/qviuad72OZHDInykQ/KRV4oH3GM1RWWmf2pmZ0D7OTuP3T3DxcHwNbA3xK2\n8nkVrLDU9sWEHdgfnHliUg6AlCgf+aBc5IXyUY2xKFiFxnsi8DlgAcXO3WY2x8yeD+wL/AthJ4SP\nmtmexetbmtnphF2Mv+Pu9zcR/7ihfOSDcpEXysdwtP53WGa2OuHGfXe5+1+Y2dsIW4/8q4d9y/7b\nzA7uuKRenXCvpLMJk5g3Ae/VjxvrQfnIB+UiL5SP4Wl9wXL3R8zsve4+c8+XZcDdZvZsd3+wsOlM\n8EbA1cX/v+fuF48w3LFH+cgH5SIvlI/haaUkWKyceRJ3/52Zzdz2+V7CL7wf6rB/upntaGbfBF5G\nsfGja+foWlA+8kW5aBZ9NuqlNQXLzFY3swPNbH3CXTSXu7fOzJmJu/8AuB94S8fbn0a43cHl7v5a\nd79pdJGPJ0U+3m9mG6J8NIqZrWZmL+z1unIxWop87GNmGxA2pNVnoyZaIQma2QLgk4Q9sdYBVgM+\nONtZR7Hs82pg9eLxSu7+WzPbfZK13zoxsx0Jk783AS8B/gB8QPkYPWa2F/CvwL+a2Qfc/eE+tspF\nYszsfcD7Cfeceg3wX8DH9Nmoh7ZcYW0N/KO77wUcA7zezP4awu8YOi+7PeyvtT7htw2dZzM6AOpj\nHeBcD3c2PRx4lZm9F5SPUWJmawHPBfYHngdsN4uNcjEiLNz1d3tgQfHZOA1Yz8zmddgoH0OQZcGy\nsEXJSzqeej1h80fc/f8T7jR7VPH4cfcVfv18LGEDSFEDZra+Fb8JKdgM+B08uVv9YSgfI6EzFx5u\nH/F1d/8yYWPUvzGz53XaKxdp6crHDcC/zPygF3gAWJun7sSsfAxJVgWrODv/FOHOvcea2WeLlz4J\nHG1mC8zsE8CPgNst/CJ85jcMH7Twq3Hc/adaUTM8ZraymX2c8IE61MyOL166knBWD4R7UAHXmtlH\ni/etpHzUyyy5ONbMnulP7cR9POEqa76FjVNn8mDKRf3Mko/jzGwNd/9Zh9kfgSeAp9vyKB8Vyapg\nEc7UX0T4Nfe7gY3NbAd3/zfgo4Q9s55P+HCeSdhXC8AJZ/wrd6/KEUMxk4+tgbcDO5vZZu7+fWCJ\nmR3dYXsa8AILu0gvQ/mom+5cvJ7wWaAY88cJOdidcCdsgLnFGf2jKBd1052P1xFuUT+z3RLAKwhb\nLD1U5EH5GJKs9hI0s42Ah9z9vuLxIuBedz98FtsvAtPu/o0Rhzn2mJm5u5vZKh7uqoyZ7Uy4/fYJ\n7n5+kat/B/Zy9yvN7FDCrdA/2WDoY8eAXBzv7t/tsj+ZsDLtxcCX3P3UkQc9xsTkw8wOAW4l3BX4\nKOB0dz+/ibjHhSyusOyp3yXc6e73dTxeleJ3CIXdyma2qZl9g3D2oiWfaZg5LpYCmNm2wKnA94F9\nzewjwJ2Eq949zexKwi/2f9RArONOv1wcYGaHmdmLitfmED4XOwBfULFKQpl8bFjYvBI4EfgycI6K\n1fA0sqy9WPr5A+B2d3+4Y3XMHwuTlQi/Al8T+J+Z93m4YdmfA9e6+24jDnts6ZMPL/79KUH+wMwu\nI8ghW7j7V4uTh53c/aJGgh8zKuTiw8DlhOXTOwLfdPdPjT7y8aRCPg4BLitOHtYHPufun24i9nFk\npAXLzLYkzD0tAbYhXEG9u3jtdOAUd7/a3f9YLNld5u7Xmtk7CAfF54CvzvabBhFP2Xx0vsfdf2Jm\nz6Q4w/RwozgVqyEZIhfPAWZu1vfv7n75qGIeZ4bIx7OBx939CTN7jU/QTuqjYNSS4POAa9x9V8KZ\n4ZpmNnP2cVjXAbANsL6Z/RtwEHCFuz+mYlUrpfJRnC1iZq82swsJy3WXzOZQVGboXMyyZFpUZ5h8\n/Bom67YfoyJpwTKzZ1m478vKxVOb89SZ+SOEX4Tva2brFL8p6eSZhM0fz3D3V7u75keGZIh8WDGx\n/DngW+6+h7v/dqTBjxk15+JBxFAoH+0g2SpBM9uPsDLmx8B9wEcIy89/DLzEi/u5WPit1bPd/d3F\n4/cSJKYHCJfW+tV3DQybD3e/2zrufCqqo1zkhfLRHpJcYZnZqsCfE27j/CbCJfI/AA8T7u2yqMP8\nDGAlM3tW8XgpYe7qDzoA6qGOfBTLeZWPIVEu8kL5aBdJClYxEf/nwFrFU2cQdiU+ADgU2NrM3l68\ntjHw2xmJyd3P8LDdj6iJOvKh+ZF6UC7yQvloF7UWLAtbJM34PI1wC2jcfTFhaegGhKXqBxF2Tfg+\n4VL8h3XGIQLKRz4oF3mhfLSToQqWmW3a+djdn+hYxXc18Cwze23x+FbCyptnu/slwAeAzwCvcPcz\nh4lDBJSPfFAu8kL5GA8qFSwz28bM/gv4roWblHW+9oniEvpG4DpgHzOb6+63E7aMWQfCj4Dd/XvF\nChwxBMpHPigXeaF8jBdRqwRnVsKY2TsJNx17FeGmiif6U/tqPWtG4y0mJ08kbMa5GvAMYE9/aodp\nMQTKRz4oF3mhfIwnpQqWhb39jiLsjPFvwC3ufq+ZvRL4BPAhd7++x3tXJkxqbubhvj1iSJSPfFAu\n8kL5GG8GSoJmtgPhzOTZBG3304Qb+OHu1wDXA3t1LPWced9bzGy74nL6Sh0A9aB85INykRfKx/hT\nZg7rCeBYdz/A3U8BrgHe0PH6cYRbPG8JYGGfOQgb2D5cY6wioHzkg3KRF8rHmDNQEjSzZxB2Tn+8\n0IT3ALZ190OLCcrHC534rwgF8H/cfe/kkU8oykc+KBd5oXyMPwOvsNz99778rhPzCfdCwsNdTiGc\nsewC/EwHQFqUj3xQLvJC+Rh/St9epJjMdMIvwi8qnnsxYfnnI8Cm7v5fCWIUs6B85INykRfKx/hS\nelm7mRlhyecpwLeB9wJ3A4e4diceOcpHPigXeaF8jC+xv8N6JfCfxd9XXLfgbhTlIx+Ui7xQPsaT\n2IK1LrAXcJy7/yFZVKIUykc+KBd5oXyMJ8nuhyWEEELUSdI7DgshhBB1oYIlhBCiFahgCSGEaAUq\nWEIIIVqBCpYQQohWoIIlhBCiFahgCSGEaAX/C9SC7y9VdvylAAAAAElFTkSuQmCC\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f0afc024ba8>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "data = pd.DataFrame([requests.get(async_url).json() for i in range(30)],\n", | |
| " columns = ['A','B','C','D']).applymap(pd.Timestamp)\n", | |
| "\n", | |
| "show_processes(data)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "As you can see, it behaves exactly as for synchronous service. In fact, python limits the power of the process because it waits for a process to finish before calling the next one." | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Call asynchronously the asynchronous service" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'44.7558 ms / query'" | |
| ] | |
| }, | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f0ae5f71940>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "data = pd.DataFrame([x.json() for x in grequests.map(list(map(grequests.get,[async_url]*30)))],\n", | |
| " columns = ['A','B','C','D']).applymap(pd.Timestamp)\n", | |
| "\n", | |
| "show_processes(data)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "As you can see, all queries have been processed in about half the time required. Another very useful property lies in the fact that the CPU has not been used most of the time. You can thus create more threads than the number of CPU you have and go even faster.\n", | |
| "\n", | |
| "For example, simply replace\n", | |
| "\n", | |
| "```python\n", | |
| "server.start(0)\n", | |
| "```\n", | |
| "\n", | |
| "by\n", | |
| "\n", | |
| "```python\n", | |
| "server.start(100)\n", | |
| "```\n", | |
| "\n", | |
| "and you get:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "'7.37901 ms / query'" | |
| ] | |
| }, | |
| "execution_count": 10, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAawAAAEPCAYAAAAeQPDsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucVXXZ9/HPhQzIQRkUEBAc0BTNNDXPio7n1B5ELe7H\nUx6ztG7tRlM0UzS7Hy0zNbXs1gpN0vL2bJkaTqaJGWKBKKnIoBwGBIeDMAjM9fzxW9vZDDN7z2mv\ntdfe3/frNa/Ze+214fJys6/1W7+TuTsiIiLFrlvSAYiIiLSFCpaIiKSCCpaIiKSCCpaIiKSCCpaI\niKRC96QDKGVmpiGYIiId4O7W/JhaWAXm7vqJ4eeaa65JPIZy+VGuledC/7RGBUtERFJBBUtERFJB\nBUtKQnV1ddIhlA3lOh7K86Ys1/1C6Rwzc+VXRKR9zAzXoAsREUkrFSwREUkFFSwREUkFFSwREUkF\nFSwREUkFLc2Uh5nNBZYDjcA6d9/XzPoDDwJVwFxgnLsvTyxIEZEyoBZWfo1Atbvv6e77RscmAM+5\n+yhgCnBFYtGJiJQJFaz8jE3zdAIwKXo8CRgba0QiImVIBSs/B541s1fN7Lzo2DbuXgfg7ouAQYlF\nJyJSJtSHld9B7r7QzAYCz5jZbEIRy9bqchYTJ0789HF1dbWWWxERaaampoaampq852lppnYws2uA\nVcB5hH6tOjMbDDzv7ru0cL6WZhIRaSctzdQBZtbbzPpGj/sARwMzgMeBs6LTzgQeSyRAEZEyohZW\nDmY2EniEcMuvO3C/u99gZlsBvwOGA7WEYe31LbxfLSwRkXZqrYWlglVAKlgiIu2nW4IiIpJqKlgi\nIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIK\nKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKlgiIpIKKliSOt/8Jtx+e9JRiEjcTFu4F46Z\nufLb9cxgl11g1qykIxGRQjAz3N2aH1cLS1Jp5cqkIxCRuHVPOgCRfNxh/frweMOG8PvDD8Nx2+Qa\nTERKlVpYUrR++9tQkG67DXr2hN69oVev8FpDA3z/+8nGJyLxUsGSojV7dvj9xhtw552wbh2MHh2O\n3X47LFyYXGwiEj8VLClaAwaE37W1UFUVHvfrF35XVsLy5cnEJSLJUMGSotUt+nROm7ZpwerXD/79\n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\n", | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x7f0ae4dca208>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "data = pd.DataFrame([x.json() for x in grequests.map(list(map(grequests.get,[async_url]*100)))],\n", | |
| " columns = ['A','B','C','D']).applymap(pd.Timestamp)\n", | |
| "\n", | |
| "show_processes(data)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "<center>That's all folks !</center>" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.5.1" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import time | |
| import pandas as pd | |
| from tornado import ioloop, web, httpserver, httpclient | |
| class LongQueryHandler(web.RequestHandler): | |
| def get(self): | |
| response = [pd.Timestamp.utcnow().time().isoformat()] # Catch the current time. | |
| time.sleep(0.1) # Wait 0.1 second. | |
| response.append(pd.Timestamp.utcnow().time().isoformat()) # Catch the time again. | |
| self.write(pd.json.dumps(response)) # Returns a JSON. | |
| class SynchronousHandler(web.RequestHandler): | |
| def get(self): | |
| client = httpclient.HTTPClient() | |
| output = [pd.Timestamp.utcnow().time().isoformat()] | |
| response = client.fetch('http://localhost:8888/longquery') | |
| output += pd.json.loads(response.body) | |
| output.append(pd.Timestamp.utcnow().time().isoformat()) | |
| self.write(pd.json.dumps(output)) | |
| class AsynchronousHandler(web.RequestHandler): | |
| @web.asynchronous | |
| def get(self): | |
| client = httpclient.AsyncHTTPClient() | |
| self.output = [pd.Timestamp.utcnow().time().isoformat()] | |
| response = client.fetch('http://localhost:8888/longquery',self.on_response) | |
| def on_response(self, response): | |
| self.output += pd.json.loads(response.body) | |
| self.output.append(pd.Timestamp.utcnow().time().isoformat()) | |
| self.write(pd.json.dumps(self.output)) | |
| self.finish() | |
| app = web.Application([ | |
| ("/longquery", LongQueryHandler), | |
| ("/synchronous", SynchronousHandler), | |
| ("/asynchronous", AsynchronousHandler), | |
| ]) | |
| server = httpserver.HTTPServer(app) | |
| server.bind(8888) | |
| server.start(100) # forks one process per cpu | |
| ioloop.IOLoop.current().start() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment