我正在用python编写代码,其中包括一些multiprocessing
和multithreading
。
我的问题是:线程或进程共享相同的调用堆栈吗?
我正在使用inspect
模块,恐怕它将在inspect.stack()
中返回错误的值。
最佳答案
不,它们不是,子流程作为独立的实体被派生/生成,因此每个流程都作为一个全新的Python实例有效地启动。
Python通过透明地腌制/取消腌制要在进程之间传输的数据来掩盖其中的某些麻烦,但是它们都拥有自己的堆栈,自己的GIL以及随之而来的所有内容。
多线程是另一回事-线程确实共享底层堆栈,但是Python对其进行分区以使其具有各自的堆栈,因此inspect.stack()
结果可能令人困惑/无法预测。
关于python - python中的调用堆栈是否在多线程和多处理中的线程或进程之间分别共享?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44571938/