久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

問題

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

解決方案

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

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

對(duì)于任何調(diào)用Python對(duì)象或Python C API的C代碼,確保你首先已經(jīng)正確地獲取和釋放了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);...

每次調(diào)用 PyGILState_Ensure() 都要相應(yīng)的調(diào)用 PyGILState_Release() .

討論

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

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

以上就是詳解C和Python中的線程混用的詳細(xì)內(nèi)容,更多關(guān)于C和Python 線程混用的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 天天看天天爽 | 国产精品久久久久久久午夜 | 成人深夜福利视频 | 亚洲成人精品视频 | 久久都是精品 | 日韩欧美在线观看一区二区三区 | 一区亚洲 | av网站在线免费观看 | 久久国| 日本黄色电影网站 | 精品久久久久久久久久久久久久 | 国产在线观看一区 | 国产日韩欧美91 | 九九热在线观看 | 欧美在线视频不卡 | 国产精品揄拍一区二区久久国内亚洲精 | 免费观看av毛片 | 黄色片在线免费观看 | 在线干 | 成人av在线网 | 欧美日韩中文国产一区发布 | 日韩中文一区二区三区 | 性视频网站免费 | 日韩成人影院 | 亚洲精品在线播放 | 韩国精品 | 999精品视频 | 成人在线看片 | 99久久99热这里只有精品 | 国产v日产∨综合v精品视频 | 九九资源站 | av在线精品 | 欧美视频免费在线 | 免费毛片网站 | 国产精品久久嫩一区二区免费 | 7799精品视频天天看 | 国产一区二区三区四区在线观看 | 一区二区三区国产视频 | 96久久久 | 亚洲精品美女在线观看 | 亚洲欧美日韩电影 |