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).处于全面的考虑,一封 ...
随机推荐
- docker run 中的privileged参数
docker 应用容器 获取宿主机root权限(特殊权限-) docker run -d --name="centos7" --privileged=true centos:7 / ...
- 【Laravel基础】laravel基础之相关概念,自定义服务提供者:Contracts, ServiceContainer, ServiceProvider, Facades关系
Contracts, ServiceContainer, ServiceProvider, Facades关系 概念 Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现 ...
- 使用 Laravel 自带的用户系统 包括登录注册功能以及错误处理
一.默认 Laravel 不会自动帮你装上用户系统, 二.但是我们可以从默认首页的代码中看到,登录注册按钮被隐藏了 三.需要手动输入命令进行安装 php artisan make:auth 安装完成后 ...
- 使用bugly热更新时自定义升级弹窗的UI样式
项目的热更新用的bugly,不过一直都只是使用他自带的升级弹窗. 不过UI小姐姐说弹窗太丑了,要自定义. bugly有提供自定义UI的官方文档:https://bugly.qq.com/docs/us ...
- 014-交互式Shell和shell脚本获取进程 pid
Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程 1.交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 ...
- Operation之条件和布尔操作符
amb 当传入多个Observable到amb操作符时, 他将取第一个发生元素或产生事件的Observable, 然后只发出他的元素. 并且忽略其他的Observable let subject191 ...
- python 使用sqlalchemy进行数据库操作
sqlalchemy是python下一个著名的数据库orm库,可以方便地进行数据表创建.数据增删改查等操作 最详细的教程,见官方:https://docs.sqlalchemy.org 这里列举一些常 ...
- "What's your problem?"记住!聊天千万不能用这句话!
"What's your problem?"记住!聊天千万不能用这句话! 2018-01-05 19:21 这个世界套路太多 学英语也不例外 一不留神就陷入套路里 有一种痛叫做“ ...
- java Random 抢红包算法
红包有一个总金额和总数量,领的时候随机分配金额. 维护一个剩余总金额和总数量,分配时,如果数量等于1,直接返回总金额,如果大于1,则计算平均值,并设定随机最大值为平均值的两倍,然后取一个随机值,如果随 ...
- Postgresql常用命令汇总
sudo -u postgres psql #进入postgresql ALTER USER postgres WITH password 'postgres'; #修改postgres用户密码 ps ...