Pymongo放弃" pymongo_kill_cursors_thread"客户退出后

时间:2017-10-22 13:36:11

标签: mongodb python-3.x pymongo

我有一个Python应用程序,它在分离的线程中运行作业。 一些workerjobs为数据库连接实现pymongo。

class Job(Thread):
     ...
     self.client = MongoClient()

每个工作都有一个完成方法,其中

self.client.close()
当作业即将终止时,将调用

。可能,这应该结束所有相关的线程,但每个工作的一个单独的线程保持活着: 的 pymongo_kill_cursors_thread

当我启动多个工作并完成它们时,这些pymongo_kill_cursors_threads永远不会死,我在短时间内得到了数百个,这是一个例子,在测试工作完成后:

Result of threading.enumerate()

我不知道为什么pymongo的close()方法没有正确清理,也不知道这是pymongo或mongodb问题。

尝试

self.client._kill_cursors_executor._thread.join(1)

没有效果,我认为是因为线程的锁定状态和事实,它是守护进程。

任何想法都赞赏。非常感谢你。

使用" PyMongo",版本:" 3.5.1"在官方docker镜像中运行Python 3.6.1和MongoDB

1 个答案:

答案 0 :(得分:1)

听起来它可能是一个错误,虽然它需要额外的诊断。请在jira.mongodb.org的PYTHON项目中打开一张票,并提供一个完整的代码示例,我们可以在我们的计算机上运行,​​以再现您看到的错误:https://stackoverflow.com/help/mcve

谢谢!