Je télécharge des centaines de millions d'éléments dans ma base de données via une API REST d'un serveur cloud sur Heroku vers une base de données dans AWS EC2. J'utilise Python et je vois constamment le message de journal INFO suivant dans les journaux.
[requests.packages.urllib3.connectionpool] [INFO] Resetting dropped connection: <hostname>
Cette "réinitialisation de la connexion interrompue" semble prendre plusieurs secondes (parfois 30+ secondes) avant que mon code continue de s'exécuter à nouveau.
Merci de votre aide. Andrew.
Demandes utilise Keep-Alive
par défaut . Resetting dropped connection
, d'après ma compréhension, signifie qu'une connexion qui devrait être vivante a été abandonnée d'une manière ou d'une autre. Les raisons possibles sont:
Keep-Alive
.Voir https://stackoverflow.com/a/25239947/2142577 pour plus de détails.
Le problème est vraiment que le serveur a fermé la connexion même si le client a demandé qu'elle soit maintenue en vie.
Ce n'est pas nécessairement parce que le serveur ne prend pas en charge les keepalives, mais il se peut que le serveur soit configuré pour n'autoriser qu'un certain nombre de requêtes sur une connexion. Cela pourrait être fait pour aider à répartir les demandes sur différents serveurs, mais je pense que cette pratique est/était courante comme défense pratique contre le code mal écrit qui fonctionne dans le serveur (par exemple, PHP) qui ne nettoie pas après lui-même après avoir servi une demande (peut-être en raison d'une condition d'erreur, etc.)
Si vous pensez que c'est le cas pour vous et que vous souhaitez ne pas voir ces journaux (qui sont enregistrés au niveau INFO), vous pouvez ajouter les éléments suivants pour calmer cette partie de la journalisation:
# Really don't need to hear about connections being brought up again after server has closed it
logging.getLogger("requests.packages.urllib3.connectionpool").setLevel(logging.WARNING)
C'est une pratique courante pour les services qui exposent les API RESTful pour éviter les abus (ou DoS).
Si vous insistez sur leur API, ils abandonneront votre connexion.
Essayez de faire dormir un peu votre script de temps en temps pour éviter la chute.