2015-11-03 57 views
3

在這本書「多線程的視覺效果」,我讀下面幾行:Python或串行處理中的多線程?

凡是在Python運行在Python運行的唯一的事情,這意味着,如果你執行的回調都用Python實現,你輸了多少多線程系統的效率提升。

Python解釋器不是線程安全的 - 它不能同時從多個線程運行。需要使用Python的線程必須等待輪到使用解釋器。

爲什麼這句話是真的?

這是必然的想法,即代碼是從C++內部執行的。

static void MyCallback(const Context &context){ 
Auto<Lock> lock(GetMyMutexFromContext(context)); 
... 
EvalMyPythonString(str); //A function that takes the GIL 
...  
} 

那究竟是什麼意思?我們能否啓動多個口譯員?

+2

閱讀這篇文章:http://programmers.stackexchange.com/questions/186889/why-was-python-written-with-the-gil –

+0

嗯,我理解正確嗎,這隻適用於兩個進程想要與一個python解釋器進行交互嗎? – user1767754

回答

0

凡是在Python運行在Python運行的唯一的事情,這意味着,如果你執行回調所有的Python實現的,你失去很多多線程系統的效率提高。

Python解釋器不是線程安全的 - 它不能同時從多個線程運行。需要使用Python的線程必須等待輪到使用解釋器。

這句話是真的嗎?這取決於你正在使用哪個python解釋器。

與Cpython:由於全局解釋器鎖定(GIL),只有一個線程可以同時運行。所以你不能使用多線程的性能優勢。即使在Cpython中使用多線程時,你的程序也會變慢。

如果你想在Cpython中編寫並行程序,你應該使用multiprocessing。其接口與threading模塊相同。

或者,您可以在Jython中使用多個線程,Ironthon。