在退出Python程序之前等待所有deamon线程完成的简单方法?

在退出Python程序之前等待所有deamon线程完成的简单方法?,python,multithreading,python-multithreading,google-cloud-python,Python,Multithreading,Python Multithreading,Google Cloud Python,我有一个长时间运行的操作,该操作由守护进程线程监控,一旦完成,就会调用主线程中的回调 当线程离开时,Python程序退出。这在我的情况下有点不幸,因为这意味着如果程序在长时间运行的操作完成之前退出,就永远不会调用回调 回调调度和监视发生在外部库的深处,因此我无法轻松修改它(长时间运行的操作是一个复杂的过程) 有没有一种简单的方法可以从我的客户机代码中等待这个守护进程线程完成?或者另一种确保回调将运行的方法?如果您想在主程序退出之前等待守护程序线程退出,但由于某些原因您没有对这些线程的引用,那么线

我有一个长时间运行的操作,该操作由守护进程线程监控,一旦完成,就会调用主线程中的回调

当线程离开时,Python程序退出。这在我的情况下有点不幸,因为这意味着如果程序在长时间运行的操作完成之前退出,就永远不会调用回调

回调调度和监视发生在外部库的深处,因此我无法轻松修改它(长时间运行的操作是一个复杂的过程)


有没有一种简单的方法可以从我的客户机代码中等待这个守护进程线程完成?或者另一种确保回调将运行的方法?

如果您想在主程序退出之前等待守护程序线程退出,但由于某些原因您没有对这些线程的引用,那么
线程化模块将介绍:


它提供了一个返回当前活动线程列表的函数。只需在其结果上循环并
join()
您感兴趣的线程。

您能
join()
您的线程吗?这将一直阻止,直到线程完成。@Hannu我可以这样做,但是我必须保留对该线程的引用,并通过客户端代码将其从库传递到main()函数。这就是为什么我想知道,在自动退出main()之前,是否有一种方法可以“发现”正在运行的守护进程线程。循环
threading.enumerate()
,然后加入您想要的线程?@etene哦,这就是我要找的。非常感谢。不客气。如果你愿意的话,我可以把它作为一个恰当的答案贴出来。