2017-09-27 1 views
0

Quand je commence une partie de mes services, il rend compte de ces avertissements et les services d'arrêt:MongoClient ouvert avant la fourche. Créer MongoClient

/usr/lib64/python2.6/site-packages/pymongo/topology.py:75: 

UserWarning: MongoClient ouvert avant la fourche. Créez MongoClient avec connect = False, ou créez un client après le forking. Consultez la documentation de PyMongo pour plus de détails: http://api.mongodb.org/python/current/faq.html#using-pymongo-with-multiprocessing> "MongoClient ouvert avant la fourche Créer MongoClient."

Cependant, la "MongoClient" a été à l'aide du paramètre "connect = False", comme vous pouvez consulter le code ci-dessous:

client = MongoClient(host, port, connect=False) 

Cela ne fonctionne toujours pas. En passant, j'ai amélioré ma version pymongo à 3.4.0. Quelqu'un peut-il me donner quelques suggestions?

Cheers, Kai

Répondre

4

Si vous utilisez la MongoClient pour toute opération qui contacte le serveur MongoDB, le MongoClient doit créer des connexions et des fils de fond. Une fois que cela est arrivé, il n'est plus sûr de l'utiliser dans un sous-processus fourchu. Par exemple, cela est dangereux:

client = MongoClient(connect=False) 
client.admin.command('ping') # The client now connects. 
if not os.fork(): 
    client.admin.command('ping') # This will print the warning. 

Assurez-vous que vous ne faites rien avec le client avant la fourche qui l'amène à se connecter.

Mieux encore, ne créez pas le client avant de le forcer du tout. Créez votre client après la fourche, dans le sous-processus.

+0

Le code fonctionnait avant de redémarrer tous les services. C'est assez étrange. –