1
我在python中编写代码,其中包含一些multiprocessing
和multithreading
。Python中的调用堆栈是在线程之间共享还是在多线程和多处理中的进程之间共享?
我的问题是:线程或进程是否共享相同的调用栈?
我使用的inspect
模块,我恐怕这将返回我错了价值inspect.stack()
。
我在python中编写代码,其中包含一些multiprocessing
和multithreading
。Python中的调用堆栈是在线程之间共享还是在多线程和多处理中的进程之间共享?
我的问题是:线程或进程是否共享相同的调用栈?
我使用的inspect
模块,我恐怕这将返回我错了价值inspect.stack()
。
不,他们不这样做,子流程被分离/衍生为独立的实体,所以每个流程都作为一个全新的Python实例有效地开始。
Python通过透明地清理/取消在进程间传输的数据来隐藏某些缺陷,但它们都获得了自己的堆栈,它们自己的GIL以及所有与之相关的GIL。
多线程是一个不同的故事 - 线程做共享底层堆但是Python分区他们出现,因为每个人都有自己的堆栈,从而inspect.stack()
结果可能会造成混淆/不可预测..