
Python 中的執行緒
|
445
Python 中的執行緒
Python 在支援執行緒的平台(例如 Win32、Linux 和其他的 Unix 變體)上
提供多執行緒功能。如果一個動作在開始到結束之間保證不會發生執行緒
的切換(thread switching),那個動作就被稱為是
不可分割
(
atomic
,或稱
「原子式」)的。實務上,在 CPython 中,在內建型別上執行時
看似
不可
分割的運算(例如簡單的指定或存取)大多
是
不可分割的(然而,擴增指
定和多重指定不是不可分割的)。但是,在多數情況下,仰賴不可分割性
(atomicity)
不是
一個好主意。你所處理的可能是使用者所編寫的類別之
實體,而非內建型別的,所以其中可能有對 Python 程式碼的隱含呼叫,使
得不可分割性的假設不一定成立。仰賴取決於實作的不可分割性可能會讓
你的程式碼被綁定到特定的實作,妨礙未來的更新。你最好使用涵蓋在本
章剩餘部分中的同步機能(synchronization facilities),而非仰賴不可分割
性的假設。
Python 提供兩種多執行緒功能。一個較舊且較低階的模組
_thread
(在 v2
中名為
thread
),具有不建議直接用在你程式碼中的低階功能性,我們在
本書中並不涵蓋
_thread
。較高階的模組
threading
奠基於
_thread
之上,
是推薦使用的那一個。多執行緒系統中關鍵的議題是如何以最佳的方式協
調多個執行緒。
threading
提供數種同步物件(synchronization objects)。