码迷,mamicode.com
首页 > 其他好文 > 详细

flask之request基础threading.local

时间:2021-02-09 11:46:54      阅读:0      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!