python 突破 GIL 呼叫lua

2021-10-02 21:32:28 字數 1113 閱讀 6538

python之threadpoolexecutor    

python結合lua打破gil的限制    

記錄目的(解決的問題):

繞過全域性gil,盡可能多的使用cpu

特點:使用執行緒池,方便排程管理

使用lua繞過gil,使得cpu的使用率達到100%

都是指令碼語言,上手簡單

過程:1. 安裝 lupa, pip install lupa

2. **

import lupa

import time

from concurrent.futures import threadpoolexecutor

# 這裡是算pi

lua_code = '''

function()

count = 0

for i = 1, 10000 do

x = math.random()

y = math.random()

if x*x + y*y <= 1 then

count = count + 1

endend

return count * 4 /10000

end'''old = time.time()

return lua_func()

# 建立執行緒池

p = threadpoolexecutor(8)

res =

# 10000個計算任務

for _ in range(10000):

# res 收集到的結果是feature, 需要通過.result獲得結果

# 值得注意的是,.result()操作會重新啟用gil,所以要放在最後

res = list(map(lambda x: x.result(), res))

# 執行緒池可以使用shubmit提交也可以使用map

# lua_funcs = [lupa.luaruntime().eval(lua_code) for _ in range(10000)]

print(time.time() - old)

print(res[0])

print(sum(res)/10000)

Python 學習筆記 GIL

python 全域性翻譯鎖 gil global interpreter lock 為了實現在多核環境下的執行時資料的一致性,python採用加鎖的思想來實現這種同步和一致性,這把鎖就是gil。這造成了一定量的效能損失,使用鎖的原因是因為python直譯器內部是執行緒不安全的。另外一點,首先需要明確...

python 執行緒GIL鎖

gil global interpreter lock cpython python中乙個執行緒對應於c語言中的乙個執行緒 gil使得同乙個時刻只有乙個執行緒在乙個cpu上執行位元組碼,無法將多個執行緒對映到多個cpu上執行 gil會根據執行的位元組碼行數以及時間片釋放gil,gil在遇到io的操作...

Python多執行緒與GIL

gil global interpreter lock 是在實現python解析器 cpython 時所引入的乙個概念。但值得注意的是,gil並不一定是所有python編譯器均必須的,如jpython就沒有gil。gil是python為解決多執行緒之間資料完整性和狀態同步的辦法,類似於在存在乙個全域...