Flask 进阶
OOP 面向对象反射
# __call__方法
# class Foo(object):
# def __call__(self, *args, **kwargs):
# return "i am call"
#
#
# f = Foo() # f 是Foo的对象
# print(f()) # f() 对象加括号执行当前对象下__call__ 函数
# __setattr__ , def __getattr__ 属性的创建 赋值 提取
# class Foo(object):
# # 属性赋值
# def __setattr__(self, key, value):
# print(f'{key},{value}')
#
# # def __getattr__(self, key, value):
# # print(key)
# # 获取属性名
# def __getattribute__(self, item):
# print(item)
# f = Foo()
# 调用__setattr__ 方法;属性的创建及赋值
# f.name = "anwen" # 对象.name 对象打点调属性
# 调用__getattribute__ 方法
# f.name
# __setitem__ __getitem__
class Foo(object):
# 字典的键值
def __setitem__(self, key, value):
# name anwen
print(key, value)
# 字典的键
def __getitem__(self, item):
print(item)
f = Foo()
# 调用 __setitem__ 方法;
f["name"] = "anwen"
# 调用__getitem__ 方法;获取的是字典的键
print(f["name"])
偏函数
from functools import partial
# def abfunc(a, b):
# print("a:", a)
# print("b:", b)
# return a + b
#
# # 将原函数和原函数接收的参数一并存放,返回新函数 在执行新函数时 将参数传入原函数中一并执行
# new_ab = partial(abfunc, a=2, b=3)
# print(new_ab)
# print(new_ab())
# 传入 x ,等待计算
def abfunc(a, b, x):
print("a:", a)
print("b:", b)
return a + b + x
# 将原函数和原函数接收的参数一并存放,返回新函数, 在执行新函数时 将参数传入原函数中一并执行
new_ab = partial(abfunc, x=4)
print(new_ab)
print(new_ab(2, 3))
线程安全
import time
import copy
from copy import deepcopy
from threading import Thread, get_ident
class Foo(object):
pass
f = Foo()
f.num = 0
local_dic = {}
# {
# get_ident():{f.num:1},
# get_ident():{f.num:2},
# get_ident():{f.num:3},
# }
def add(i):
# print(get_ident())
# 极快解决阻塞问题,保证公共对象的安全性;但是浪费了很多内存,空间换时间
local_dic[get_ident()] = deepcopy(f)
local_dic[get_ident()].num = i
f.num = i
time.sleep(1)
print(local_dic[get_ident()].num)
for i in range(20):
# 多线程操作同一个对象, 出现线程不安全
task = Thread(target=add, args=(i,))
# add(i)
task.start()
线程安全 local
import time
from threading import Thread, local
# 继承local 解决线程安全问题,还不浪费资源
class Foo(local):
pass
f = Foo()
f.num = 0
def add(i):
f.num = i
time.sleep(1)
print(f.num)
for i in range(20):
# 多线程操作同一个对象, 出现线程不安全
task = Thread(target=add, args=(i,))
# add(i)
task.start()
请求上下文 阅读源码
# 请求是如何到达Flask应用的
from werkzeug.wrappers import Request, Response
from werkzeug import run_simple
@Request.application
def app(env):
print(env, type(env))
return Response("200 ok") # 函数+()运行
run_simple("127.0.0.1", 5000, app)
Flask 进阶的更多相关文章
- Flask进阶
Threading.local 作用:为每个线程创建一个独立的空间,使得线程对自己的空间中的数据进行操作(数据隔离). 应用: flask上下文管理中的local中比这更高级,为协程. DBUtils ...
- Flask 进阶session和上下文管理解析
session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...
- Flask 进阶二
flask中的路由系统: endpoint:反向url地址,默认为视图函数名(url_for). from flask import Flask,url_for app = Flask(__name_ ...
- Flask的Context(上下文)学习笔记
上下文是一种属性的有序序列,为驻留在环境内的对象定义环境.在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步.事务.实时激活.安全性等等. 比如在计算机中,相对于进程而言,上下文就是进 ...
- Flask:文件配置方式实践及其中的各种问题记录
Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2, 提示: 1.请查看本文后面的“18-07-17 11:18重大纠正” ! 2.flask run命令运行时传入参数 ...
- Flask入门系列(转载)
一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...
- Django和Flask相对总结目录
Django中文文档官网:https://yiyibooks.cn/xx/Django_1.11.6/index.html Flask中文文档官网:https://dormousehole.readt ...
- python复习目录
目录 一.计算机基础 二.python 2.1初始python 2.1 python基础1 2.2 python基础2 三.函数 3.1 函数进阶 3.2 函数之装饰器 3.3 递归函数之二分查找 3 ...
- flask 电子邮件进阶实践-用模板发送163邮件
电子邮件进阶实践 下面来学习构建邮件的HTML正文,并使用模板组织内容. 一封电子邮件的正文可以是纯文本(text/plain),也可以是HTML格式的文本(text/html).处于全面的考虑,一封 ...
随机推荐
- RSA加密公钥系数获取结果多00
写在前面 本文是在解决加密和解密用的不是同一套密钥对时找到的一篇, 最后问题不在byte数组, 是自己工具类中生成密钥对的问题, 但是本文RSA加密中公钥指数和公钥系数的获取(byte[]部分)讲解比 ...
- kotlin基础 密封类
密封类 密封类用来表示受限的类继承结构:当一个值为有限几种的类型, 而不能有任何其他类型时.在某种意义上,他们是枚举类的扩展:枚举类型的值集合 也是受限的,但每个枚举常量只存在一个实例,而密封类 的一 ...
- git 学习目录
git命令方式 git - 1.基础 git - 2.github git - 3.分支 番外 git - gitHub生成Markdown目录
- mysql索引本质
一.索引帮助mysql高效获取数据排好序的数据结构. 二.索引存储位置:磁盘文件. 三.索引结构:二叉树.红黑树.hash.BTree.B+Tree .索引结构为了更快找到目标数据. 四.数据结构 4 ...
- xgboost 算法总结
xgboost有一篇博客写的很清楚,但是现在网址已经失效了,之前转载过,可以搜索XGBoost 与 Boosted Tree. 现在参照这篇,自己对它进行一个总结. xgboost是GBDT的后继算法 ...
- 在网址前加神秘字母,让你打开新世界(z)
在网址前加神秘字母,让你打开新世界 1.在百度云后面加“wp”可以高速下载百度云资源<ignore_js_op> 2.在任何网址前面加“wn.run”(一定要加到这个网址www的前面)之后 ...
- SpringBoot读取Linux服务器某路径下文件\读取项目Resource下文件
// SpringBoot读取Linux服务器某路径下文件 public String messageToRouted() { File file = null; try { file = Resou ...
- golang遍历文件夹
golang遍历文件夹: func main() { //方式一 filepath.Walk("temp/", func (path string, info os.FileInf ...
- locale区域语言设置
查看当前配置 # 默认配置[maintain@localhost:~]$ locale LANG=zh_CN.utf8 LC_CTYPE="zh_CN.utf8" LC_NUMER ...
- 【miscellaneous】【C/C++语言】UTF8与GBK字符编码之间的相互转换
UTF8与GBK字符编码之间的相互转换 C++ UTF8编码转换 CChineseCode 一 预备知识 1,字符:字符是抽象的最小文本单位.它没有固定的形状(可能是一个字形),而且没有值." ...