国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

詳解C語言和Python中的線程混用

瀏覽:3日期:2022-07-15 18:08:54

問題

你有一個程序需要混合使用C、Python和線程, 有些線程是在C中創建的,超出了Python解釋器的控制范圍。 并且一些線程還使用了Python C API中的函數。

解決方案

如果你想將C、Python和線程混合在一起,你需要確保正確的初始化和管理Python的全局解釋器鎖(GIL)。 要想這樣做,可以將下列代碼放到你的C代碼中并確保它在任何線程被創建之前被調用。

#include <Python.h> ... if (!PyEval_ThreadsInitialized()) { PyEval_InitThreads(); } ...

對于任何調用Python對象或Python C API的C代碼,確保你首先已經正確地獲取和釋放了GIL。 這可以用 PyGILState_Ensure() 和 PyGILState_Release() 來做到,如下所示:

.../* Make sure we own the GIL */PyGILState_STATE state = PyGILState_Ensure();/* Use functions in the interpreter */.../* Restore previous GIL state and return */PyGILState_Release(state);...

每次調用 PyGILState_Ensure() 都要相應的調用 PyGILState_Release() .

討論

在涉及到C和Python的高級程序中,很多事情一起做是很常見的—— 可能是對C、Python、C線程、Python線程的混合使用。 只要你確保解釋器被正確的初始化,并且涉及到解釋器的C代碼執行了正確的GIL管理,應該沒什么問題。

要注意的是調用 PyGILState_Ensure() 并不會立刻搶占或中斷解釋器。 如果有其他代碼正在執行,這個函數被中斷知道那個執行代碼釋放掉GIL。 在內部,解釋器會執行周期性的線程切換,因此如果其他線程在執行, 調用者最終還是可以運行的(盡管可能要先等一會)。

以上就是詳解C和Python中的線程混用的詳細內容,更多關于C和Python 線程混用的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲国产日韩a在线亚洲 | 一级毛片免费不卡 | 久久免费视频在线 | 国产精品网站 夜色 | 手机在线精品视频每日更新 | 亚洲高清免费观看 | 欧美乱大交xxxxx | 成年视频国产免费观看 | 日韩美女一级片 | japanese色系国产在线高清 | 国产aaa女人十八毛片 | 人成18亚洲资源在线 | 欧美日韩视频精品一区二区 | 美女黄色三级 | 全国男人的天堂天堂网 | 日韩欧美亚洲视频 | 亚洲日产综合欧美一区二区 | 亚洲成人第一页 | 国产成人免费a在线资源 | 久久久久久国产精品视频 | 男人添女人下面免费毛片 | 不卡一级aaa全黄毛片 | 99毛片 | 国产成人精品一区二三区2022 | 韩国v欧美v亚洲v日本v | fc2久久| 欧美69精品国产成人 | 精品国产免费一区二区三区五区 | 成人午夜私人影院入口 | 男人在线网址 | 欧美日韩亚洲国产精品 | 亚洲二区在线观看 | 中文无线乱码二三四区 | 成人网18免费网站在线 | 国产精品久久久久久搜索 | 精品国产免费久久久久久 | 国产一级毛片夜一级毛片 | 成人伊人青草久久综合网 | 美女张开腿给男生桶下面视频 | 欧美日韩看看2015永久免费 | 一级风流片a级国产 |