1
我在python中編寫代碼,其中包含一些multiprocessing
和multithreading
。Python中的調用堆棧是在線程之間共享還是在多線程和多處理中的進程之間共享?
我的問題是:線程或進程是否共享相同的調用棧?
我使用的inspect
模塊,我恐怕這將返回我錯了價值inspect.stack()
。
我在python中編寫代碼,其中包含一些multiprocessing
和multithreading
。Python中的調用堆棧是在線程之間共享還是在多線程和多處理中的進程之間共享?
我的問題是:線程或進程是否共享相同的調用棧?
我使用的inspect
模塊,我恐怕這將返回我錯了價值inspect.stack()
。
不,他們不這樣做,子流程被分離/衍生爲獨立的實體,所以每個流程都作爲一個全新的Python實例有效地開始。
Python通過透明地清理/取消在進程間傳輸的數據來隱藏某些缺陷,但它們都獲得了自己的堆棧,它們自己的GIL以及所有與之相關的GIL。
多線程是一個不同的故事 - 線程做共享底層堆但是Python分區他們出現,因爲每個人都有自己的堆棧,從而inspect.stack()
結果可能會造成混淆/不可預測..