首页 > 其他 > 详细

九 .Flask local 和 偏函数

时间:2019-10-27 13:46:05      阅读:90      评论:0      收藏:0      [点我收藏+]

一  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)

 





 

 

 

 

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)

 





 

 

 

 

 

九 .Flask local 和 偏函数

原文:https://www.cnblogs.com/lovershowtime/p/11747169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!