摘要:參考線程局部變量各線程獨享自己的變量,但是使用全局變量主線程也有自己的線程局部變量線程沒有屬性,子線程與主線程擁有各自的變量繼承應用實例
thread local in python
參考 Thread Locals in Python: Mostly easy
線程局部變量import threading mydata = threading.local() mydata.x = "hello" class Worker(threading.Thread): def run(self): mydata.x = self.name print mydata.x w1, w2 = Worker(), Worker() w1.start(); w2.start(); w1.join(); w1.join()
Thread-1 Thread-2
各線程獨享自己的變量,但是使用全局變量 mydata
主線程也有自己的線程局部變量import threading mydata = threading.local() mydata.x = {} class Worker(threading.Thread): def run(self): mydata.x["message"] = self.name print mydata.x["message"] w1, w2 = Worker(), Worker() w1.start(); w2.start(); w1.join(); w2.join()
Exception in thread Thread-1: Traceback (most recent call last): File "C:Python27lib hreading.py", line 801, in __bootstrap_inner self.run() File "E:/learn/python/test/thread_local.py", line 15, in run mydata.x["message"] = self.name AttributeError: "thread._local" object has no attribute "x" Exception in thread Thread-2: Traceback (most recent call last): File "C:Python27lib hreading.py", line 801, in __bootstrap_inner self.run() File "E:/learn/python/test/thread_local.py", line 15, in run mydata.x["message"] = self.name AttributeError: "thread._local" object has no attribute "x"
線程 w1,w2 沒有 x 屬性,子線程與主線程擁有各自的變量
繼承 threading.localimport threading class MyData(threading.local): def __init__(self): self.x = {} mydata = MyData() class Worker(threading.Thread): def run(self): mydata.x["message"] = self.name print mydata.x["message"] w1, w2 = Worker(), Worker() w1.start(); w2.start(); w1.join(); w2.join()
Thread-1 Thread-2應用實例
bottle 0.4.10
class Request(threading.local): """ Represents a single request using thread-local namespace. """ def bind(self, environ): """ Binds the enviroment of the current request to this request handler """ self._environ = environ self._GET = None self._POST = None self._GETPOST = None self._COOKIES = None self.path = self._environ.get("PATH_INFO", "/").strip() if not self.path.startswith("/"): self.path = "/" + self.path #---------------------- request = Request() #---------------------- def WSGIHandler(environ, start_response): """The bottle WSGI-handler.""" global request global response request.bind(environ) response.bind() try: handler, args = match_url(request.path, request.method) if not handler: raise HTTPError(404, "Not found") output = handler(**args) except BreakTheBottle, shard: output = shard.output
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/45010.html
摘要:我們知道多線程環(huán)境下,每一個線程均可以使用所屬進程的全局變量。在線程中使用局部變量則不存在這個問題,因為每個線程的局部變量不能被其他線程訪問。 我們知道多線程環(huán)境下,每一個線程均可以使用所屬進程的全局變量。如果一個線程對全局變量進行了修改,將會影響到其他所有的線程。為了避免多個線程同時對變量進行修改,引入了線程同步機制,通過互斥鎖,條件變量或者讀寫鎖來控制對全局變量的訪問。 只用全局變...
摘要:多線程的理解多進程和多線程都可以執(zhí)行多個任務,線程是進程的一部分。多線程創(chuàng)建在中,同樣可以實現(xiàn)多線程,有兩個標準模塊和,不過我們主要使用更高級的模塊。多線程的應用場景。 1、多線程的理解 多進程和多線程都可以執(zhí)行多個任務,線程是進程的一部分。線程的特點是線程之間可以共享內存和變量,資源消耗少(不過在Unix環(huán)境中,多進程和多線程資源調度消耗差距不明顯,Unix調度較快),缺點是線程之間...
摘要:為了避免改亂為,我們在前面已經(jīng)提到說要加鎖。僅供一個線程使用,線程間相互不影響。例如下列程序中函數(shù)中定義的變量就是局部變量。所有綁定的參數(shù)都是線程隔離的。下面展示一下代碼創(chuàng)建一個全局的對象初始化一個線程內變量,該變量線程間互不影響。 我們在編寫多線程程序的時候,往往會遇到兩種類型的變量。 一種是全局變量,多個線程共享。為了避免改亂為,我們在前面已經(jīng)提到說要加鎖。 一種是局部變量。僅供...
摘要:的類行為是的類行為的子集,目前尚不支持優(yōu)先級線程組,線程無法銷毀停止暫?;謴突蛑袛?。表示繼承創(chuàng)建該線程的當前線程的屬性。重入鎖,同步原語的一種,可由同一線程多次獲取已持有的鎖。 threading在低級的_thread模塊上構建了更高級的線程接口。 threading模塊基于Java線程模型設計。不過Java中鎖和條件變量是每個對象的基本行為,在python中卻是單獨的對象。pytho...
摘要:在深入理解中的變量上中我們看到的引入,使得可以很方便地在多線程環(huán)境中使用局部變量。特別需要注意的是,基類的并不會屏蔽派生類中的創(chuàng)建。到此,整個源碼核心部分已經(jīng)理解的差不多了,只剩下用來執(zhí)行清除工作。 在 深入理解Python中的ThreadLocal變量(上) 中我們看到 ThreadLocal 的引入,使得可以很方便地在多線程環(huán)境中使用局部變量。如此美妙的功能到底是怎樣實現(xiàn)的?如果你...
閱讀 3330·2021-11-25 09:43
閱讀 1314·2021-11-23 09:51
閱讀 3617·2021-10-11 11:06
閱讀 3729·2021-08-31 09:41
閱讀 3607·2019-08-30 15:53
閱讀 3517·2019-08-30 15:53
閱讀 975·2019-08-30 15:43
閱讀 3317·2019-08-29 14:02