摘要:参考线程局部变量各线程独享自己的变量,但是使用全局变量主线程也有自己的线程局部变量线程没有属性,子线程与主线程拥有各自的变量继承应用实例
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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/45010.html
摘要:我们知道多线程环境下,每一个线程均可以使用所属进程的全局变量。在线程中使用局部变量则不存在这个问题,因为每个线程的局部变量不能被其他线程访问。 我们知道多线程环境下,每一个线程均可以使用所属进程的全局变量。如果一个线程对全局变量进行了修改,将会影响到其他所有的线程。为了避免多个线程同时对变量进行修改,引入了线程同步机制,通过互斥锁,条件变量或者读写锁来控制对全局变量的访问。 只用全局变...
摘要:多线程的理解多进程和多线程都可以执行多个任务,线程是进程的一部分。多线程创建在中,同样可以实现多线程,有两个标准模块和,不过我们主要使用更高级的模块。多线程的应用场景。 1、多线程的理解 多进程和多线程都可以执行多个任务,线程是进程的一部分。线程的特点是线程之间可以共享内存和变量,资源消耗少(不过在Unix环境中,多进程和多线程资源调度消耗差距不明显,Unix调度较快),缺点是线程之间...
摘要:为了避免改乱为,我们在前面已经提到说要加锁。仅供一个线程使用,线程间相互不影响。例如下列程序中函数中定义的变量就是局部变量。所有绑定的参数都是线程隔离的。下面展示一下代码创建一个全局的对象初始化一个线程内变量,该变量线程间互不影响。 我们在编写多线程程序的时候,往往会遇到两种类型的变量。 一种是全局变量,多个线程共享。为了避免改乱为,我们在前面已经提到说要加锁。 一种是局部变量。仅供...
摘要:的类行为是的类行为的子集,目前尚不支持优先级线程组,线程无法销毁停止暂停恢复或中断。表示继承创建该线程的当前线程的属性。重入锁,同步原语的一种,可由同一线程多次获取已持有的锁。 threading在低级的_thread模块上构建了更高级的线程接口。 threading模块基于Java线程模型设计。不过Java中锁和条件变量是每个对象的基本行为,在python中却是单独的对象。pytho...
摘要:在深入理解中的变量上中我们看到的引入,使得可以很方便地在多线程环境中使用局部变量。特别需要注意的是,基类的并不会屏蔽派生类中的创建。到此,整个源码核心部分已经理解的差不多了,只剩下用来执行清除工作。 在 深入理解Python中的ThreadLocal变量(上) 中我们看到 ThreadLocal 的引入,使得可以很方便地在多线程环境中使用局部变量。如此美妙的功能到底是怎样实现的?如果你...
阅读 3317·2021-11-25 09:43
阅读 1305·2021-11-23 09:51
阅读 3610·2021-10-11 11:06
阅读 3699·2021-08-31 09:41
阅读 3598·2019-08-30 15:53
阅读 3510·2019-08-30 15:53
阅读 967·2019-08-30 15:43
阅读 3308·2019-08-29 14:02