我在与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