目录
二、Local组件的简单使用 - local对象.变量名 = 赋值
三、实现Local并使其兼容线程和协程 - 参考Flask源码
一、local 简单介绍
python3 - 多线程 - threading 模块(基于win系统)- Thread、Timer 组件
当多个线程修改同一个数据时,将该数据复制多份给每个线程单独使用,即为每个线程开辟一块空间进行数据存储
1-1 不使用local组件存在的弊端
多个线程同时操作同一个全局变量,每次操作都会修改值,存在锁机制。导致每个线程取到的起始数据不相同,导致最后结果输出错误。
# 未使用local from threading import Thread import time test= -1 def task(arg): global test test= arg # 模拟IO操作,用于实现对全局变量的混乱操作 time.sleep(2) print(test) for i in range(10): t = Thread(target=task,args=(i,)) t.start() ''' 9 9 9 9 9 9 9 9 9 9 '''
二、Local组件的简单使用 - local对象.变量名 = 赋值
总结:由Local组件的简单使用可以看出Local操作类似于字典的操作。
from threading import Thread from threading import local import time from threading import get_ident # get_ident用于获取线程、进程ID号 # 初始化local对象 loc= local() def task(arg): # 对象.val = 1/2/3/4/5 loc.value = arg time.sleep(2) print(loc.value) for i in range(10): t = Thread(target=task,args=(i,)) t.start() ''' 3