摘要:參考線程局部變量各線程獨(dú)享自己的變量,但是使用全局變量主線程也有自己的線程局部變量線程沒有屬性,子線程與主線程擁有各自的變量繼承應(yīng)用實(shí)例
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
各線程獨(dú)享自己的變量,但是使用全局變量 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應(yīng)用實(shí)例
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
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/45010.html
摘要:我們知道多線程環(huán)境下,每一個(gè)線程均可以使用所屬進(jìn)程的全局變量。在線程中使用局部變量則不存在這個(gè)問(wèn)題,因?yàn)槊總€(gè)線程的局部變量不能被其他線程訪問(wèn)。 我們知道多線程環(huán)境下,每一個(gè)線程均可以使用所屬進(jìn)程的全局變量。如果一個(gè)線程對(duì)全局變量進(jìn)行了修改,將會(huì)影響到其他所有的線程。為了避免多個(gè)線程同時(shí)對(duì)變量進(jìn)行修改,引入了線程同步機(jī)制,通過(guò)互斥鎖,條件變量或者讀寫鎖來(lái)控制對(duì)全局變量的訪問(wèn)。 只用全局變...
摘要:多線程的理解多進(jìn)程和多線程都可以執(zhí)行多個(gè)任務(wù),線程是進(jìn)程的一部分。多線程創(chuàng)建在中,同樣可以實(shí)現(xiàn)多線程,有兩個(gè)標(biāo)準(zhǔn)模塊和,不過(guò)我們主要使用更高級(jí)的模塊。多線程的應(yīng)用場(chǎng)景。 1、多線程的理解 多進(jìn)程和多線程都可以執(zhí)行多個(gè)任務(wù),線程是進(jìn)程的一部分。線程的特點(diǎn)是線程之間可以共享內(nèi)存和變量,資源消耗少(不過(guò)在Unix環(huán)境中,多進(jìn)程和多線程資源調(diào)度消耗差距不明顯,Unix調(diào)度較快),缺點(diǎn)是線程之間...
摘要:為了避免改亂為,我們?cè)谇懊嬉呀?jīng)提到說(shuō)要加鎖。僅供一個(gè)線程使用,線程間相互不影響。例如下列程序中函數(shù)中定義的變量就是局部變量。所有綁定的參數(shù)都是線程隔離的。下面展示一下代碼創(chuàng)建一個(gè)全局的對(duì)象初始化一個(gè)線程內(nèi)變量,該變量線程間互不影響。 我們?cè)诰帉懚嗑€程程序的時(shí)候,往往會(huì)遇到兩種類型的變量。 一種是全局變量,多個(gè)線程共享。為了避免改亂為,我們?cè)谇懊嬉呀?jīng)提到說(shuō)要加鎖。 一種是局部變量。僅供...
摘要:的類行為是的類行為的子集,目前尚不支持優(yōu)先級(jí)線程組,線程無(wú)法銷毀停止暫停恢復(fù)或中斷。表示繼承創(chuàng)建該線程的當(dāng)前線程的屬性。重入鎖,同步原語(yǔ)的一種,可由同一線程多次獲取已持有的鎖。 threading在低級(jí)的_thread模塊上構(gòu)建了更高級(jí)的線程接口。 threading模塊基于Java線程模型設(shè)計(jì)。不過(guò)Java中鎖和條件變量是每個(gè)對(duì)象的基本行為,在python中卻是單獨(dú)的對(duì)象。pytho...
摘要:在深入理解中的變量上中我們看到的引入,使得可以很方便地在多線程環(huán)境中使用局部變量。特別需要注意的是,基類的并不會(huì)屏蔽派生類中的創(chuàng)建。到此,整個(gè)源碼核心部分已經(jīng)理解的差不多了,只剩下用來(lái)執(zhí)行清除工作。 在 深入理解Python中的ThreadLocal變量(上) 中我們看到 ThreadLocal 的引入,使得可以很方便地在多線程環(huán)境中使用局部變量。如此美妙的功能到底是怎樣實(shí)現(xiàn)的?如果你...
閱讀 3316·2021-11-25 09:43
閱讀 1304·2021-11-23 09:51
閱讀 3609·2021-10-11 11:06
閱讀 3698·2021-08-31 09:41
閱讀 3597·2019-08-30 15:53
閱讀 3510·2019-08-30 15:53
閱讀 965·2019-08-30 15:43
閱讀 3307·2019-08-29 14:02