我正在用python编写代码,其中包括一些multiprocessing
和multithreading
。
我的问题是:线程或进程是否共享相同的调用堆栈?
我正在使用inspect
模块,我担心它会在inspect.stack()
中返回错误的值。
不,他们没有,子进程作为单独的实体分叉/生成,因此每个进程实际上都是作为一个全新的 Python 实例开始的。
Python通过透明地挑选/取消挑取数据在进程之间传输来隐藏一些肮脏的东西,但它们都有自己的堆栈,自己的GIL以及随之而来的一切。
多线程是一个不同的故事 - 线程确实共享底层堆栈,但Python将它们分区,因为它们都有自己的堆栈inspect.stack()
因此结果可能会令人困惑/不可预测。