【发布时间】:2022-01-05 06:16:47
【问题描述】:
我阅读了 python 的单个文档。它说必须在主线程中注册单个处理程序。
如果我启动一个线程(祖父),它启动一个子线程(父亲),它启动另一个线程(孙子)
与孙子相比,父亲线程是主线程吗?
【问题讨论】:
标签: python linux multithreading
我阅读了 python 的单个文档。它说必须在主线程中注册单个处理程序。
如果我启动一个线程(祖父),它启动一个子线程(父亲),它启动另一个线程(孙子)
与孙子相比,父亲线程是主线程吗?
【问题讨论】:
标签: python linux multithreading
没有。只有一个主线程。它是程序启动时运行的线程。
您可以使用threading.current_thread() == threading.main_thread() 检查您的代码在哪个线程上运行。
signal.signal() documentation 声明:
启用线程时,该函数只能从主解释器的主线程调用;尝试从其他线程调用它会引发
ValueError异常。
因此,使用此函数的最佳方法是在启动任何线程之前设置您的信号处理程序。
注意文档also says:
Python 信号处理程序始终在主解释器的主 Python 线程中执行,即使信号是在另一个线程中接收到的。这意味着信号不能用作线程间通信的手段。
【讨论】:
如果我正确理解了这个问题; 不,主线程不会继承地跟踪孙子。虽然有不同的方法可以启动线程,但一种取决于子线程在关闭父线程之前完成并关闭,或者父线程并行继续。
但在一般情况下,父亲被主线程“拥有”,而孩子被父亲“拥有”。
【讨论】: