pymongo的find_one方法返回无,但文档存在于DB中

时间:2016-12-28 11:21:40

标签: python multithreading mongodb

我在与pymongo和线程有关的问题上挣扎。 我有一个使用线程的python应用程序。这个应用程序通过pymongo进行查询,例如db.collection.find_one({'_id': obj_id})。但通常,这些查询返回None,但是在DB中存在具有此id的对象。我不能在我的本地机器上重现这种行为,我不知道为什么。这只发生在生产中。

我读了这篇article,其中讨论了pymongo,套接字和线程。但是这篇文章描述的旧方法,在旧版本的pymongo中曾经使用过。另外,我发现了类似的issue

我在所有线程pymongo.MongoClient('mongodb://localhost:27100/my_db').get_default_database()中使用一个连接实例。我认为None可能是另一个线程的响应,因为pymongo使用套接字池。

例如:thread_1进行查询并进入休眠状态。这个查询套接字后回到pymongo池。 thread_2唤醒并进行查询,但是pymongo获取了thread_1使用的套接字,而thread_2获得了外部响应。

这只是一个想法。我不确定这是真的。

我可以遇到哪个问题?

PS: I use pymongo==3.3.0 and MongoDB 3.2.0

0 个答案:

没有答案