我在我的軟件中有許多線程都做同樣的事情,但每個線程都是從不同的「角度」操作的。我有一個「StateModel」對象,用於整個線程和線程內的對象,但是StateModel需要爲每個線程計算不同的值。Python靜態線程變量
我不喜歡將StateModel對象傳遞給所有需要它的函數的想法。通常,我會創建一個模塊變量,整個程序中的所有對象都可以引用來自模塊變量的相同數據。但是,有沒有辦法讓這個靜態模塊變量的概念對每個線程都是不同的和獨立的?一種靜態的Thread變量?
謝謝。
我在我的軟件中有許多線程都做同樣的事情,但每個線程都是從不同的「角度」操作的。我有一個「StateModel」對象,用於整個線程和線程內的對象,但是StateModel需要爲每個線程計算不同的值。Python靜態線程變量
我不喜歡將StateModel對象傳遞給所有需要它的函數的想法。通常,我會創建一個模塊變量,整個程序中的所有對象都可以引用來自模塊變量的相同數據。但是,有沒有辦法讓這個靜態模塊變量的概念對每個線程都是不同的和獨立的?一種靜態的Thread變量?
謝謝。
這在threading.local
中實施。
我傾向於不喜歡大多數引用文檔的答案,但是......好吧,一切的時間和地點。
表示線程本地數據的類。線程本地數據是其值爲線程特定的數據 。要管理線程本地數據,只是 創建的本地實例(或子類),並存儲在 它的屬性:
mydata = threading.local() mydata.x = 1
實例的值將 單獨的線程不同。
有關更多詳細信息和大量示例,請參閱
_threading_local
模塊的文檔字符串 。
值得注意的是,您可以讓您的課程延伸至threading.local
,並且您的班級突然出現線程本地行爲。
很好的回答!我不知道爲什麼我在Google上搜索時無法找到它。我想我正在尋找錯誤的關鍵詞。感謝Roippi! – Crbreingan
對於這種用例,您可能最好使用多處理而不是多線程。 https://docs.python.org/2/library/multiprocessing.html – WreckeR
「per-thread static variable」的概念通常稱爲線程本地存儲(TLS)(不僅在python中)。由roippi提供的答案引用了python提供的TLS實現。 – pasztorpisti