标签:init 创建 etc 线程 port time ini 自己的 foo
引子:
flask中的request 在单进程单线程中没有问题,但是性能肯定是下降的,如果强制开启多线程,会导致线程不安全。但是threading.local() 方法支持多线程,但是不支持多协程
代码:
# -*- coding: utf-8 -*- """ threadlocal 上下问管理 源码request 解决 资源竞争导致的数据错乱 1 加锁 2 针对请求的线程 创建分身 threadlocal 也就是本地线程 保证即使是多个线程 自己的值也是互相隔离的 threading.local 对象用于为买个线程开辟一块空间来保存自己的独有的值 """ import threading class foo(object): def __init__(self): self.name=0 # 不是用 本地线程 最后name 拿到最后一个 都是19 #local_val=foo() # 使用本地线程 按照自己赋的值 """ threading.local() 源码 try: from greenlet import getcurrent as get_ident except ImportError: try: from thread import get_ident except ImportError: from _thread import get_ident """ local_val=threading.local() def func(num): local_val.name=num import time time.sleep(1) print(local_val.name,threading.currentThread().name) for i in range(20): th=threading.Thread(target=func,args=(i,),name="线程%s"%(i)) th.start()
flask之request基础threading.local
标签:init 创建 etc 线程 port time ini 自己的 foo
原文地址:https://www.cnblogs.com/yuan-x/p/14387127.html