标签: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