Je travaille actuellement sur l'informatique distribuée. Mes travailleurs retourne ses résultats en l'insérant dans une base de données mongoDB.Le code fonctionne bien, mais la connexion reste ouverte et à un moment mon système est à court de sockets. Voici mon code de travail:Comment puis-je forcer Pymongo à fermer des sockets?
def worker(elt):
client=pymongo.MongoClient(MONGODB_URI)
db = client.get_default_database()
essaiElt = db['essaiElt']
#compute here
essaiElt.insert(elt.toDict())
client.close()
En utilisant cette commande « -anbo netstat » Je peux voir toutes les prises de courant encore ouvert (plus de 3000), le nombre maximum de travailleurs est de 14, mais ils doivent faire face à plus que 10 000 tâches.
...
TCP 10.130.151.11:4999 10.130.137.128:27017 En attente 0
TCP 10.130.151.11:5000 10.130.137.128:27017 En attente 0
J'ai essayé de définir des délais mais cela n'a aucun effet.
Comment puis-je fermer des sockets sans redémarrer ma base de données?
Python 2.7.12 Pymongo 3.3 MongoDB 3.2.10
Combien de temps faut-il pour exécuter la section "Calculer ici"? Est-ce qu'un seul processus Python insère plusieurs documents dans la base de données, ou un seul, avant que le processus ne se termine? –
Combien de temps faut-il pour exécuter la section "Calculer ici"? En fait, il est vide. Est-ce qu'un seul processus Python insère plusieurs documents dans la base de données, ou un seul, avant que le processus ne se termine? Le worker est géré par la bibliothèque pp (python parallèle) Il obtient donc une tâche, crée un socket, insère l'élément, ferme le socket et récupère une autre tâche pour faire la même chose. Donc, un travailleur peut éventuellement créer beaucoup de socket. –