我有一个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
答案 0 :(得分:1)
听起来它可能是一个错误,虽然它需要额外的诊断。请在jira.mongodb.org的PYTHON项目中打开一张票,并提供一个完整的代码示例,我们可以在我们的计算机上运行,以再现您看到的错误:https://stackoverflow.com/help/mcve
谢谢!