九 .Flask local 和 偏函数

一  local 和 偏函数

1. local

local多个线程修改同一个数据,复制多份变量给每个线程用,
比如我们用的request,怎样让不同的请求有自己的request。就是为每个线程开辟一块空间进行数据存储

  threading.local【和flask无任何关系】
  作用:为每个线程创建一个独立的空间,使得线程对自己的空间中的数据进行操作(数据隔离)。

  不用threading.local

from threading import Thread
import time
ctx = -1
def task(arg):
    global ctx
    ctx = arg
    # time.sleep(2)
    print(ctx)

for i in range(5):
    t = Thread(target=task,args=(i,))
    t.start()

# 0
# 1
# 2
# 3
# 4

 使用threading.local

from threading import Thread,local
# 特殊的对象
ctx = local()
def task(arg):
    ctx.value = arg
    # time.sleep(2)
    print(ctx.value)
for i in range(5):
    t = Thread(target=task,args=(i,))
    t.start()

    # 0
    # 1
    # 2
    # 3
    # 4
import threading
from threading import local
def task(i):
    print(threading.get_ident(),i)    #  获取每个线程唯一id

for i in range(5):
    t = threading.Thread(target=task,args=(i,))
    t.start()
    
# 14896 0
# 10780 1
# 3356 2
# 11384 3
# 14308 4
import threading
from threading import local
import time
obj = local()
def task(i):
    obj.xxxxx = i
    print(threading.get_ident(), obj.xxxxx,"拉拉")
    time.sleep(2)
    # print(obj.xxxxx,i)
    print(threading.get_ident(),i,"哈哈")

for i in range(5):
    t = threading.Thread(target=task,args=(i,))
    t.start()
# 6232 0 拉拉
# 4348 1 拉拉
# 7084 2 拉拉
# 972 3 拉拉
# 6560 4 拉拉
# 6232 0 哈哈
# 6560 4 哈哈
# 972 3 哈哈
# 4348 1 哈哈
# 7084 2 哈哈
 
 
通过字典自定义threading.local(函数) 方法一
import time
import threading
import greenlet
DIC = {}
def task(i):
    # ident = threading.get_ident()
    ident = greenlet.getcurrent()
    if ident in DIC:
        DIC[ident]['aa'] = i
    else:
        DIC[ident] = {'aa':i }
    time.sleep(2)

    print(DIC[ident]['aa'],i)

for i in range(5):
    t = threading.Thread(target=task,args=(i,))
    t.start()
    print(DIC)
 
 
 




 

猜你喜欢

转载自www.cnblogs.com/lovershowtime/p/11747169.html