flask --- 04 . 偏函数, 线程安全,栈堆,

一.偏函数(partial)

  ①第一种

  结果为:

 

  ② 第二种

 

二.线程安全

    将空间转换成时间

  问题: 1秒钟打印所有结果

threading.current_thread().ident  :线程ID

 

  ①不安全示例

import time
from threading import Thread
import threading


class Foo(object):
    pass

foo = Foo()

def add(i):
    foo.num = i
    time.sleep(1)
    print(foo.num,i,threading.current_thread().ident,foo)
for i in range(20): task = Thread(target=add,args=(i,)) task.start()

  结果为:

 

   ②线程安全 (local)

import time
from threading import Thread
import threading



from threading import local

class Foo(local):
    pass

foo = Foo()

def add(i):
    foo.num = i
    time.sleep(1)
    print(foo.num,i,threading.current_thread().ident,foo)

for i in range(20):
    task = Thread(target=add,args=(i,))
    task.start()

 

   结果为:

 

 

 三.堆栈(简化版)

堆:
先进先出,后进后出

栈:
先进后出,后进先出

  栈示例:

import time

# stack = [] # [request1,session1],[r2,s2],[r3,s3]

from threading import local,Thread
import threading

class MyLocalStack(local):
    stack = {}
    pass


mls = MyLocalStack()

def ts(i):
    a = threading.current_thread().ident  #线程ID
    mls.stack[a] = [f"r{i+1}",f"s{i+1}"]  # 存入
    time.sleep(1)
    print(mls.stack[a].pop(),mls.stack[a].pop(),a)

    # time.sleep(1)
    mls.stack.pop(a)    #取出
    print(mls.stack , a)

for i in range(5):
    task = Thread(target=ts,args=(i,))
    task.start()

 

 

 四. 面向对象的特殊成员

 

__call__  :   对象( )  时,会自动执行

__setattr__ :   对象.key值 = value值   时自动执行
 
  
__getattr__  :   对象. key值  时自动执行

 

 

  结果为:

 

转载于:https://www.cnblogs.com/sc-1067178406/p/10697029.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`db.session.rollback()` 是 Flask-SQLAlchemy 提供的一个方法,用于回滚当前数据库会话中的所有未提交的更改。 当使用 SQLAlchemy 进行数据库操作时,通常会在一个会话(session)中进行多个数据库操作,比如插入、更新、删除等。在执行这些操作过程中,如果出现错误或者需要取消之前的更改,可以使用 `db.session.rollback()` 方法来回滚到之前的状态。 具体来说,`db.session.rollback()` 方法会撤销当前会话中的所有未提交的更改,包括添加的新对象、更新的对象和删除的对象。它会将数据库会话重置为最近一次提交之前的状态。 使用示例: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_uri' db = SQLAlchemy(app) @app.route('/') def index(): try: # 执行一些数据库操作 # ... db.session.commit() # 提交更改 except: db.session.rollback() # 出错时回滚更改 finally: db.session.close() # 关闭会话 return 'Hello, World!' if __name__ == '__main__': app.run() ``` 在上述示例中,我们在一个路由函数中进行数据库操作。如果操作成功,我们调用 `db.session.commit()` 提交更改。如果发生错误,我们调用 `db.session.rollback()` 回滚未提交的更改。无论如何,我们都要调用 `db.session.close()` 来关闭会话,释放资源。 总结一下,`db.session.rollback()` 方法用于回滚当前数据库会话中的所有未提交的更改,以保持数据库的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值