Flask学习笔记.1
1. 主流Python Web框架
- django:大而全面,内部提供:ORM、Admin、中间件、Form、ModelForm、Session、缓存、信号、CSRF;
- flask:短小精悍,可扩展性强,第三方组件丰富;
- tornado:短小精悍,可扩展性强,但是第三方没这么丰富,强项——异步非阻塞。
wsgi: 全称Python Web Server Gateway Interface,
作用: 1. WSGI是一套接口标准协议/规范;
2. 通信(作用)区间是Web服务器和Python Web应用程序之间;
3. 目的是制定标准,以保证不同Web服务器可以和不同的Python程序之间相互通信
2. 自定义local对象
操作如下代码时候
from threading import Thread,local
ss=local()
def task(arg):
#对象.val= 1/2/3/4/5
ss.value = arg
for i in range(10):
t=Thread(target=task,args(i,))
t.start
- 使用多线程时,创建 threading.local() 对象,可以为线程每个线程开辟一块空间并进行数据存储,使用
- 自己通过字典创建一个类似threading.local的东西
dict_s={
4215:{val:0}
4217:{val:1}
4218:{val:2}
4219:{val:3}
线程id:{val:*}
}
def set(k,v):
ident = get_ident()
if ident in dict_s:
dict_s[ident][k]=v
else:
dict_s[ident]={k:v}
def get(k):
ident=get_ident()
return dict_s[ident][k]
def task(arg):
#对象.val= 1/2/3/4/5
set('val',arg)
v=get('val')
print(v)
for i in range(10):
t=Thread(target=task,args(i,))
t.start
- 自定义Local对象(基于面向对象)PS:flask使用的就是如此方式
***作用:***为每个线程(协程)开辟一块空间存储数据
try:
#获取协程id,如果没有协程,使用线程
from greenlet import getcurrent as get_ident
except Exception as e:
from threding import get_ident
from threading import get_ident
class dictLocal(object):
def __init__(self):
# self.dict_s = {}
object.__setattr__(self,'dict_s',{})
def __setattr__(self, key, value):
ident = get_ident()
if ident in self.dict_s:
self.dict_s[ident][key] = value
else:
self.dict_s[ident] = {key: value}
def __getattr__(self, item):
ident = get_ident()
return self.dict_s[ident][item]
def task(arg):
obj=dictLocal()
# 对象.val= 1/2/3/4/5
obj.val= arg
v = obj.val
print(v)
for i in range(10):
t = Thread(target=task,args=(i, ))
t.start()