python 中的调用堆栈是否分别在多线程和多处理中的线程或进程之间共享?
Does the calling stack in python's shared between the threads or the processes in multithreading and multiprocessing respectively?
我正在 python 中编写代码,其中包括一些 multiprocessing
和 multithreading
。
我的问题是:线程或进程是否共享同一个调用堆栈?
我正在使用 inspect
模块,我担心它会 return 我在 inspect.stack()
中输入错误的值。
不,他们没有,子进程得到 forked/spawned 作为单独的实体,因此每个进程作为一个全新的 Python 实例有效地启动。
Python 通过透明地 pickling/unpickling 在进程之间传输的数据隐藏了一些肮脏的东西,但它们都有自己的堆栈、自己的 GIL 以及所有与之相关的东西。
多线程是另一回事 - 线程确实共享底层堆栈,但 Python 将它们分区以显示每个线程都有自己的堆栈,因此 inspect.stack()
结果可以是 confusing/unpredictable..
我正在 python 中编写代码,其中包括一些 multiprocessing
和 multithreading
。
我的问题是:线程或进程是否共享同一个调用堆栈?
我正在使用 inspect
模块,我担心它会 return 我在 inspect.stack()
中输入错误的值。
不,他们没有,子进程得到 forked/spawned 作为单独的实体,因此每个进程作为一个全新的 Python 实例有效地启动。
Python 通过透明地 pickling/unpickling 在进程之间传输的数据隐藏了一些肮脏的东西,但它们都有自己的堆栈、自己的 GIL 以及所有与之相关的东西。
多线程是另一回事 - 线程确实共享底层堆栈,但 Python 将它们分区以显示每个线程都有自己的堆栈,因此 inspect.stack()
结果可以是 confusing/unpredictable..