1 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
在支持的系統(tǒng)fork()(Linux)上,這很容易 -
只需在啟動(dòng)進(jìn)程之前編譯該函數(shù)一次 - 這將使 numba 緩存編譯器輸出,就像通常一樣。
但由于 fork 的寫(xiě)時(shí)復(fù)制魔法,該緩存會(huì)自動(dòng)與子進(jìn)程共享!
目前尚不清楚的是如何在沒(méi)有適當(dāng)fork()支持的系統(tǒng)上執(zhí)行此操作。numba 的緩存可以 pickled 嗎?
from multiprocessing import Process
from time import time, sleep
from numba import njit
@njit
def child():
pass
if __name__ == "__main__":
child() # this will do it
ps = [Process(target=child) for _ in range(100)]
for p in ps:
p.start()
s = time()
for p in ps:
p.join()
print("compile time:", time() - s)
compile time: 0.011722326278686523
numba 的nogil也值得一看。這可以消除對(duì)進(jìn)程的需要,并且線程共享 numba 編譯緩存就好了
添加回答
舉報(bào)