1.python之threading.local

  • 当每个线程在执行 val.num=1 ,在内部会为此线程开辟一个空间,来存储 num=1

  • val.num,找到此线程自己的内存地址去取自己存储 num

import time
import threading val1 = threading.local() def task(i):
val.num = i
time.sleep(1)
print(val.num) for i in range(4):
t = threading.Thread(target=task,args=(i,))
t.start()

2. 线程唯一标识

get_ident

import threading
from threading import get_ident def task():
ident = get_ident()
print(ident)
for i in range(20):
t = threading.Thread(target=task)
t.start()

3. 自定义threading.local

储存结构:

storage = {
1112:{'x1':1}
1113:{'x1':2}
1114:{'x1':3}
1115:{'x1':4}
}

import threading
class Local(object):
def __init__(self):
object.__setattr__(self,'storage',{}) def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in self.storage:
self.storage[ident][key] = value
else:
self.storage[ident] = {key:value} def __getattr__(self, item):
ident = threading.get_ident()
if ident not in self.storage:
return
return self.storage[ident].get(item) local = Local() def task(arg):
local.x1 = arg
print(local.x1) for i in range(5):
t = threading.Thread(target=task,args=(i,))
t.start()

4. 加强版threading.local

储存结构:

storage = {
1111:{'x1':[]},
1112:{'x1':[]}
1113:{'x1':[]}
1114:{'x1':[]}
1115:{'x1':[]},
1116:{'x1':[]}
}

import threading
class Local(object):
def __init__(self):
object.__setattr__(self,'storage',{}) def __setattr__(self, key, value):
ident = threading.get_ident()
if ident in self.storage:
self.storage[ident][key].append(value)
else:
self.storage[ident] = {key:[value,]} def __getattr__(self, item):
ident = threading.get_ident()
if ident not in self.storage:
return
return self.storage[ident][item][-1] local = Local() def task(arg):
local.x1 = arg
print(local.x1) for i in range(5):
t = threading.Thread(target=task,args=(i,))
t.start()

flask 源码专题(七):threading.local和高级的更多相关文章

  1. 03 flask源码剖析之threading.local和高级

    03 threading.local和高级 目录 03 threading.local和高级 1.python之threading.local 2. 线程唯一标识 3. 自定义threading.lo ...

  2. flask 源码专题(五):SqlAlchemy 中操作数据库时session和scoped_session的区别

    1原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalc ...

  3. flask 源码专题(二):请求上下文与全文上下文

    源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ...

  4. flask 源码专题(十一):LocalStack和Local对象实现栈的管理

    目录 04 LocalStack和Local对象实现栈的管理 1.源码入口 1. flask源码关于local的实现 2. flask源码关于localstack的实现 3. 总结 04 LocalS ...

  5. flask 源码专题(九):flask扩展点

    1. 信号(源码) 信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作. pip3 install blinker 2. 根据flask项目的请求流程来进行设置扩展点 中间件 # ...

  6. flask 源码专题(一):app.run()的背后

    当我们用Flask写好一个app后, 运行app.run()表示监听指定的端口, 对收到的request运行app生成response并返回. 现在分析一下, 运行app.run()后具体发生了什么事 ...

  7. flask 源码专题(八):路由加载

    1.示例代码 from flask import Flask app = Flask(__name__,static_url_path='/xx') @app.route('/index') def ...

  8. flask 源码专题(六):session处理机制

    前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...

  9. flask 源码专题(十):flash源码研究

    flash源码 def flash(message, category="message"): flashes = session.get("_flashes" ...

随机推荐

  1. 【PHP】如何将SESSION数据存放到Redis中

    在php中,SESSION的数据默认是存放到文件中,这样性能不仅不高,而且不利于扩展.在搭建集群后,默认存放到文件中就不适用了.所以,我们一般将SESSION自定义,让SESSION中的数据存放到 数 ...

  2. Linux 安装 MySql5.7

    首先在官网下载对应版本的Linux安装包.一般来说应用 community 版本就可以. mysql community version download addr 1. 将文件上传至 Linux 并 ...

  3. VMWare 安装CentOS7 时启动黑屏

    针对这个问题找了好久解决方案,发现网络上的都没啥用. 首先根据网络上的文章,查看cpu虚拟化设置.清空网络设置等等... 都没什么效果. 经过一段时间排查发现问题根源: win10系统下,启动 vmw ...

  4. python 直方图

    import matplotlib.pyplot as plt import numpy as np pop = np.random.randint(0,100,100) pop n,bins,pat ...

  5. PE文件介绍 (2)-DOS头,DOS存根,NT头

    PE头 PE头由许多结构体组成,现在开始逐一学习各结构体 0X00 DOS头 微软创建PE文件格式时,人们正广泛使用DOS文件,所以微软充分考虑了PE文件对DOS文件的兼容性.其结果是在PE头的最前面 ...

  6. 2019-02-15 python接口图灵机器人(简单好玩)

    import requests import json def Run(text): url = "http://openapi.tuling123.com/openapi/api/v2&q ...

  7. (五)application/x-www-form-urlencoded(表单请求)

    原文链接:https://blog.csdn.net/justry_deng/article/details/81042379

  8. MFC套接字连接不成功-记得在app的cpp文件里面初始化套接字

    MFC套接字连接不成功-记得在app的cpp文件里面初始化套接字 stdafx.h文件中添加:#include "afxsock.h" BOOL CMFC_TCP_Client_c ...

  9. HTTP Request Smuggling 请求走私

    参考文章 浅析HTTP走私攻击 SeeBug-协议层的攻击--HTTP请求走私 HTTP 走私漏洞分析 简单介绍 攻击者通过构造特殊结构的请求,干扰网站服务器对请求的处理,从而实现攻击目标 前提知识 ...

  10. .NET 5 尝鲜 - 开源项目TerminalMACS WPF管理端支持.NET 5

    .NET 5 尝鲜 - 开源项目TerminalMACS WPF管理端支持.NET 5 一个使用 Prism 作为模块化框架.基于多个开源控件库作为UI控件选择.集成开源 UI 界面设计的 .NET ...