2013-04-08 123 views
2

我對線程和異步編程一般都比較陌生,但我試圖理解兩者之間的區別,因爲它與CPython中的GIL有關。Python中的線程vs異步執行

從閱讀我瞭解,線程有自己的堆棧,這兩個模型是一個不同的編程範例。但是鑑於它們不能由於GIL而同時運行,python線程在底下是一種異步執行方式嗎?我真的想更好地理解python解釋器如何實現線程,特別是它如何確定一個線程何時被阻塞,另一個線程是否可以被執行?

+0

也許[這是](http://stackoverflow.com/questions/1190206/threading-in-python)問題可以幫助嗎? – nvlass 2013-04-08 10:31:57

回答

1

當執行python代碼 - 調用在C中實現的函數時,GIL只發揮作用,例如,GIL不應該干擾afaik。此外,從磁盤下載文件或移動文件可以與python線程同時工作。從Python Wiki

引用:

注意,可能阻塞或長時間運行的操作,如I/O,圖像處理,並且NumPy的數字運算,發生的GIL外部。因此,只有在多線程程序中,在GIL中花費大量時間,解釋CPython字節碼,GIL纔會成爲瓶頸。

您可能會看到multiprocessing模塊,它可以讓您克服GIL並在機器上使用多個Cores。此外,還有一些工作正在使PyPy(一種替代Python解釋器)在某一天變得無GIL(僅搜索STM/AME)。