在python程式中呼叫cpp的庫建立的執行緒是否受制於GIL

時間 2021-06-12 04:53:19

1樓:Kenneth

搞清楚GIL是什麼。Global Interpreter Lock,不涉及直譯器當然不受控制了。實際上python連你起了執行緒都不知道。

2樓:Gavin

用pthread create_new的話肯定受限的,寫擴充套件的方式不行。比較簡單的方法我覺得是通過IO呼叫c++的程式。比如subprocess。

或者通過socket。這兩種其實都是比較簡單的。比較麻煩的方法就是把c++編譯成c lib,c語言的lib,a或者so,靜態庫a檔案不知道能不能用,但是python直接呼叫c語言的so或者dll(windows上)動態鏈結庫是沒問題的,但是程式寫起來很麻煩,不如直接走IO容易。

呼叫c的lib能不能突破GIL不好說(估計不行),但是通過IO肯定沒問題。因為完全是兩個程序在通訊。c語言開乙個基於檔案IO的socket十分容易。

python寫乙個基於檔案IO的socket更容易幾分鐘的事情,所以我覺得這是乙個很好的方法,而且也不占用系統埠。

3樓:俞文永

答案是不受制於GIL, 但是難點在於將c++執行緒的結果通知回python管控的執行緒而不受制於GIL,但也有很多解決方法。

比如,c++建立執行緒(如果是單純的消費者執行緒,則沒有這個煩惱了), 該執行緒處理完任務後,將結果放到乙個佇列中(無鎖佇列更佳), python執行緒可以每隔一段時間從這個佇列取結果,這樣完全不受GIL影響,可以充分利用多核。

4樓:Xi Yang

查了一下GIL:

In CPython, theglobal interpreter lock, orGIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. 你自己的模組開多個執行緒,如果這些執行緒不反回去操縱Python interpreter,應當沒有關係吧?

在Python中,parameters與argument有什麼不同?

levi a parameter is a variable which we use in the function definition that is a handle that allows the code in the function to access the arguments f...

在Python中,plt imshow為啥對於np zeros和np ones矩陣都顯示為黑色影象

程軍 今天在使用pyplot.imshow函式顯示2D標量陣列時,不論陣列是255還是0,結果顯示出來的都是黑色。看了下官方文件 Normalize optional.The Normalize所以需要指定灰度範圍,有兩種方式可以正常顯示2D標量陣列 pt.imshow test array,cma...

為什麼 Python 程式中很少看到駝峰式的命名方式?

童蒙 最近參加了coursera的乙個python課程,有一題作業的答案解釋裡講到這個,python裡class name的命名規範是camel case,而函式命名規範是下劃線 摘自pep8Function Names Function names should be lowercase,with...