最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C語(yǔ)言和Python中的線程混用

 更新時(shí)間:2020年07月30日 11:38:04   作者:David Beazley  
這篇文章主要介紹了C和Python中的線程混用的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

問(wèn)題

你有一個(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() 來(lái)做到,如下所示:

...
/* 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í)程序中,很多事情一起做是很常見(jiàn)的—— 可能是對(duì)C、Python、C線程、Python線程的混合使用。 只要你確保解釋器被正確的初始化,并且涉及到解釋器的C代碼執(zhí)行了正確的GIL管理,應(yīng)該沒(méi)什么問(wèn)題。

要注意的是調(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)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

安新县| 嵩明县| 海安县| 连州市| 昌乐县| 华容县| 水城县| 互助| 突泉县| 龙南县| 星座| 铁力市| 太湖县| 慈利县| 鄢陵县| 彭阳县| 彭水| 桃园县| 卓资县| 和顺县| 铁力市| 玉屏| 青海省| 巴楚县| 鄯善县| 紫云| 赤水市| 开封市| 土默特左旗| 龙游县| 广丰县| 赤城县| 宁乡县| 巢湖市| 朔州市| 湘潭市| 清涧县| 枝江市| 镇坪县| 淮安市| 莒南县|