Last active
          June 7, 2018 13:38 
        
      - 
      
- 
        Save donatello/0b399d0353cb29dc91b0 to your computer and use it in GitHub Desktop. 
    Gevent + Request Session object Thread Safety Test
  
        
  
    
      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 gevent | |
| from gevent.monkey import patch_all | |
| patch_all() | |
| import requests | |
| import json | |
| s = requests.Session() | |
| def make_request(s, d): | |
| r = s.post("http://127.0.0.1:5000", data=json.dumps({'value': d})) | |
| if r.content.strip() != str(d*2): | |
| print("Sent %s got %s" % (r.content, str(d*2))) | |
| if r.status_code != 200: | |
| print(r.status_code) | |
| print(r.content) | |
| gevent.joinall([ | |
| gevent.spawn(make_request, s, v) | |
| for v in range(300) | |
| ]) | 
  
    
      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
    
  
  
    
  | Flask==0.10.1 | |
| Jinja2==2.7.2 | |
| MarkupSafe==0.23 | |
| Werkzeug==0.9.4 | |
| argparse==1.2.1 | |
| gevent==1.0.1 | |
| greenlet==0.4.2 | |
| gunicorn==18.0 | |
| itsdangerous==0.24 | |
| requests==2.3.0 | |
| wsgiref==0.1.2 | 
  
    
      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
    
  
  
    
  | from gevent.wsgi import WSGIServer | |
| from gevent.monkey import patch_all | |
| patch_all() | |
| from flask import Flask | |
| from flask import request | |
| import time | |
| import json | |
| app = Flask(__name__) | |
| @app.route('/', methods=['POST', 'GET']) | |
| def hello_world(): | |
| d = json.loads(request.data) | |
| return str(d['value']*2) | |
| if __name__ == '__main__': | |
| http_server = WSGIServer(('', 5000), app) | |
| http_server.serve_forever() | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
            
Thanks for this code! I was wondering about the same thing. I inserted a time.sleep(random()*5) in the server's hello_world for good measure. Good to know Requests sessions are greenlet-safe.