2017-02-02 3 views
1

J'essaye de faire la demande de HTTP d'un gestionnaire à l'autre mais il expire. Pourquoi? L'utilisation des œuvres de la bibliothèque de la demande, mais pas avec 127.0.0.1requests.get à localhost expire

# sample.py 
import falcon 
import json 
import requests 

class TS: 
    def on_get(self, req, resp): 
     output = { 
      'output': 'DataService.', 
      'author': 'Python3' 
     } 
     resp2 = requests.get('http://127.0.0.1:8000/a') 
     resp.body = json.dumps(output) 
     resp.status = falcon.HTTP_200 

class SE: 
    def on_get(self, req, resp): 
     output = { 
      'output': 'Service.', 
      'author': 'Python3' 
     } 

     resp.body = json.dumps(output) 

api = falcon.API() 
api.add_route('/a', SE()) 
api.add_route('/t', TS()) 

-je obtenir cette erreur journal

[2017-02-02 20:41:05 +0100] [27515] [CRITICAL] WORKER TIMEOUT (pid:27544)

Répondre

1

Vous êtes probablement en cours d'exécution cela en utilisant gunicorn de la ligne de commande comme indiqué dans le tutoriel:

$ gunicorn sample:api 

cela signifie que gunicorn est démarré avec la valeur par défaut de one worker process qui est un sync worker avec one thread.

Cette configuration ne peut traiter qu'une seule requête à la fois, toute autre requête bloquera jusqu'à ce que la précédente soit terminée. Donc, si vous essayez de faire une demande à partir de votre application sur le même serveur, vous aurez un blocage.

Pour que cela fonctionne, vous pouvez augmenter le nombre de processus de travail et de threads, par exemple:

$ gunicorn --workers 2 --threads 4 sample:api