flask 高级编程 上下文与栈(转)


# -*- coding=utf-8 -*- from flask import Flask, current_app app = Flask(__name__) ctx = app.app_context()
ctx.push()
a = current_app
d = current_app.config['DEBUG']
ctx.pop()

test.py

# -*- coding=utf-8 -*- from flask import Flask, current_app app = Flask(__name__) class MyResource:
def __enter__(self):
print('connect to resoure')
return self def __exit__(self, exc_type, exc_val, exc_tb):
print('close resource connection') def query(self):
print('query data') with MyResource as resource:
resource.query()

test.py

# -*- coding=utf-8 -*- from flask import Flask
from app.models.book import db
from app.web.book import web def create_app():
app = Flask(__name__)
app.config.from_object('app.secure')
app.config.from_object('app.setting')
register_blueprint(app) db.init_app(app)
with app.app_context():
db.create_all()
# db.create_all(app=app)
return app def register_blueprint(app):
app.register_blueprint(web)
db create_all

fisher/app/__init__.py

# -*- coding=utf-8 -*- import threading def worker():
print('i am thread')
t = threading.current_thread()
print(t.getName()) t = threading.current_thread()
print(t.getName()) new_t = threading.Thread(target=worker, name='qiyue_thread')
new_t.start()

test/thread.py

# -*- coding=utf-8 -*- import time
import threading def worker():
print('i am thread')
t = threading.current_thread()
time.sleep(100)
print(t.getName()) new_t = threading.Thread(target=worker, name='qiyue_thread')
new_t.start() t = threading.current_thread()
print(t.getName())

test/thread.py
中间部分改为worker(),则会等worker执行结束再执行下面的,不是通过线程的方式调用,而是直接在主线程中调用的

# -*- coding=utf-8 -*- import time
import threading from werkzeug.local import Local my_obj = Local()
my_obj.b = 1 def worker():
my_obj.b = 2
print('in new thread b is:' + str(my_obj.b)) new_t = threading.Thread(target=worker, name='qiyue_thread')
new_t.start()
time.sleep(1) # 主线程
print('in main thread b is:' + str(my_obj.b))

test/local.py
29.5 线程隔离的栈


# -*- coding=utf-8 -*- from werkzeug.local import LocalStack s = LocalStack()
s.push(1) # 将一个元素推入到栈顶
print(s.top) # 将栈顶的元素取出来,只是取,不会删除
print(s.top) # top上方加了@property,作为属性,不需要括号
print(s.pop()) # pop是方法
print(s.top) s.push(1)
s.push(2)
print(s.top)
print(s.top)
print(s.pop())
print(s.top)

test/LocalStack.py
flask 高级编程 上下文与栈(转)的更多相关文章
- Python Flask高级编程
第1章 课程导语介绍课程的内容1-1 开宗明义 试看1-2 课程维护与提问 第2章 Flask的基本原理与核心知识本章我们首先介绍Python官方推荐的最佳包与虚拟环境管理工具:Pipenv.接着我们 ...
- flask高级编程 LocalStack 线程隔离
转:https://www.cnblogs.com/wangmingtao/p/9372611.html 30.LocalStack作为线程隔离对象的意义 30.1 数据结构 限制了某些能力 30 ...
- 学习python-20191208(1)-Python Flask高级编程开发鱼书_第03章_数据与flask路由
视频01: 略...... ———————————————————————————————————————————————————————————— 视频02: 搜索需要外部数据源,也就是需要外部的A ...
- 学习python-20191230(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数
视频06: 1.自动导包快捷键——默认为alt + enter 键组合 选中的字符由小写变为大写——Ctrl + Shift + U键组合 2.DataRequired()——防止用 ...
- 学习python-20191217(1)-Python Flask高级编程开发鱼书_第04章_应用、蓝图与视图函数
视频01: flask框架:最上层是app,它就像一个插线板一样,比如可以插入蓝图,还可以插入其他各种flask插件. 每个蓝图又可以插入很多视图函数,并可指定静态文件夹和模板文件夹. 好的代码结构, ...
- 学习python-20191208(2)-Python Flask高级编程开发鱼书_第03章_数据与flask路由
视频06: 定义静态方法的两种方式: 1.在方法上方加上装饰@staticmethod 2.在方法上方加上装饰@classmethod 方法中要加参数cls 如:def search_by_isb ...
- 学习python-20191203-Python Flask高级编程开发鱼书_第02章 Flask的基本原理与核心知识
视频01: 做一个产品时,一定要对自己的产品有一个明确的定位.并可以用一句话来概括自己产品的核心价值或功能. 鱼书网站几个功能 1.选择要赠送的书籍,向他人赠送书籍(价值功能,核心价值的主线): 2. ...
- python 全栈开发,Day139(websocket原理,flask之请求上下文)
昨日内容回顾 flask和django对比 flask和django本质是一样的,都是web框架. 但是django自带了一些组件,flask虽然自带的组件比较少,但是它有很多的第三方插件. 那么在什 ...
- JavaScript高级编程——引用类型、Array数组使用、栈方法
JavaScript高级编程——引用类型.Array数组使用.栈方法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...
随机推荐
- LeapMotion Demo3
原文:LeapMotion Demo3 从Github及其他论坛下载一些LeapMotion的例子,部分例子由于SDK的更新有一些小Bug, 已修复,感兴趣的可以下载: http:// ...
- WPF 4 DataGrid 控件(基本功能篇)
原文:WPF 4 DataGrid 控件(基本功能篇) 提到DataGrid 不管是网页还是应用程序开发都会频繁使用.通过它我们可以灵活的在行与列间显示各种数据.本篇将详细介绍WPF 4 中 ...
- 【转载】MySQL Replication 环境安装与配置
安装[root@msr01 ~]# yum install mysql-serverInstalled:mysql-server.x86_64 0:5.1.73-3.el6_5 Dependency ...
- JAVASCRIPT高程笔记-------JSON与AJAX
json对象——语法 简单值:与JS相同语法,可以是字符串,数值,布尔值,null:但不支持undefined 对象: 复杂数据类型,表示一组有序的键值对,键值对的值可以是简单数据,也可以是复杂数据 ...
- Lexer的设计--下(5)
一个礼拜之后我终于从成都回来了, 从今天开始更新会恢复... 一点小的改进 写lex()的时候距离我上一次写已经一个礼拜了, 所以我回顾了一下之前的代码, 发现还是有瑕疵. 比如考虑到一个较短的程序, ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻(转)
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- BGP路由的手动汇总
网络拓扑 XRV1 ========================================================== !hostname XRV1!interface Loopba ...
- 零元学Expression Blend 4 - Chapter 1 缘起
原文:零元学Expression Blend 4 - Chapter 1 缘起 本来都使用Adobe相关工具从事设计工作的我,因缘际会下,接触到了Expression Blend 4,让我完全的对微软 ...
- UWP入门(三) -- StackPanel与Grid的区别
原文:UWP入门(三) -- StackPanel与Grid的区别 ##1.Grid 下布局 <Grid Background="{ThemeResource ApplicationP ...
- 社会不是承认有学历的人, 而是承认努力过得人, 而且是真正努力过不是穷忙的人(没有学历就要多付出一倍的努力)good
送你一句 这就是你水平差的理由? 楼主你工资低是因为你技术不行, 不想努力然后怪罪学历, 为什么学历高的混得好, 因为学历高的人努力过, 你没学历技术还不行, 凭什么证明你努力过, 社会不是承认有学历 ...