利用python的装饰器实现类似java中的synchronized

from threading import Lock,Thread
from functools import wrapsdefault_lock=Lock()
lock_list={'default':Lock()}
def synchronized(func=None,obj=None):if func is not  None:@wraps(func)def wrapper(*args,**kwargs):lock=lock_list['default']lock.acquire()try:return func(*args,**kwargs)finally:lock.release()return wrapperif obj is not None:cur_id=id(obj)default_lock.acquire()try:current_lock=lock_list.get(id(obj),None)if current_lock is None:current_lock=Lock()lock_list[cur_id]=current_lockfinally:default_lock.release()def decorator(func):def wrapper(*args,**kwargs):current_lock.acquire()try:return func(*args,**kwargs)finally:current_lock.release()return wrapperreturn decoratora=0
obj=[]
@synchronized(obj=obj)
def add():global aa+=1
@synchronized(obj=obj)
def sub():global aa-=1
'''
使用两把锁会出现错误的原因是由于可以同时有两个线程修改a,但是同一把锁就不行,因为这把锁不释放其他线程就不能操作a
'''
def task():for i in range(6672325):sub()add()thread_list=[Thread(target=task) for i in range(4)]
[t.start() for t in thread_list]
[t.join() for t in thread_list]
print(a)

python实现synchronized相关推荐

  1. python wait_Python的等效Java函数wait(),notify(),synchronized

    我必须在Python 2.7中编写一个类,我有一些问题. 我最近来自java背景和学习python 如果我必须在java中做,我会写这些 public class CommandSender exte ...

  2. python 获取用户ip_Python爬虫教程:你还在苦苦拉票吗?刷票小程序案例原理剖析!...

    你还在苦苦拉票吗? 前言 剖析投票原理 处理思路 具体实战 主要流程 具体细节python 代码实例python 具体细节java 代码实现java 总结 点击此处,获取海量Python学习资料! 前 ...

  3. Python并发编程实例教程

    有关Python中的并发编程实例,主要是对Threading模块的应用,文中自定义了一个Threading类库. 一.简介 我们将一个正在运行的程序称为进程.每个进程都有它自己的系统状态,包含内存状态 ...

  4. 多线程并发的解决方案 volatile synchronized notify notifyAll wait关键字分析

    2019独角兽企业重金招聘Python工程师标准>>> 1.ThreadLocal用法 在java中,如果一个变量需要被多个线程访问,可以使用volatile来声明它为"易 ...

  5. 大专学java还是python_零基础应该选择学习 java、php、前端 还是 python?

    这三门当中,首推Java.真的,Python当然是好,但是对于一个新入门的人,最重要的是先找到工作不是吗?而找工作的话,Java无疑是最容易的.对于跨行业的人而言,最困难的其实是第一步,那就是如何进入 ...

  6. python os.system返回值_python os.system()返回值判断

    最近遇到os.system()执行系统命令的情况,上网搜集了一下资料,整理如下,以备不时之需,同时也希望能帮到某些人. 一.python中的 os.system(cmd)的返回值与linux命令返回值 ...

  7. python开发的软件sparrow-黑客常用wifi蓝牙分析攻击工具,让你的设备陷入危险之中...

    工具概述 Sparrow-wifi本质上一款针对下一代2.4GHz和5GHz的WiFi频谱感知工具,它不仅提供了GUI图形化用户界面,而且功能更加全面,可以代替类似inSSIDer和linssid之类 ...

  8. java好还是python好-学Python 好还是java 好?

    说实话python和java各有各的优点,经过python这几年的快速发展,现在的市场其实很明朗了,python其实更加适合于爬虫机器学习人工智能领域,但是java还是偏向于工程性的领域,所以领域不同 ...

  9. php和python哪个工资高-前端,java,php,python工程师哪个最缺 知乎

    匿名用户 1级 2017-11-11 回答 这三门当中,首推Java.真的,Python当然是好,但是对于一个新入门的人,最重要的是先找到工作不是吗?而找工作的话,Java无疑是最容易的.对于跨行业的 ...

最新文章

  1. python可视化:matplotlib学习笔记
  2. python事件驱动编程_Python事件驱动编程
  3. php发送gmail,使用GMail SMTP服务器从PHP页面发送电子邮件
  4. mac 安装node_node 服务端部署
  5. presto-server-0.198集群安装
  6. (6) Google2012笔试卷
  7. js常用reduce方法
  8. 中专科学计算机应用基础试题及答案,职业中专《计算机应用基础》期中考试试卷...
  9. LINUX内核中的xx_initcall初始化标号
  10. 云服务器cpu性能,云服务器cpu性能
  11. oracle 时间间隔,ORACLE JOB间隔时间参考
  12. [机器学习-sklearn]数据预处理要点总结
  13. 关于使用DFS,BFS的一些思考总结
  14. iOS开发之Undefined symbols for architecture x86_64报错
  15. JVM性能优化之JVM调优
  16. 项目管理的五个过程和九大知识领域
  17. Leetcode每日一题 面试题56 - I.数组中数字出现的次数
  18. 2.4 货币转换 B
  19. 360安卓_据说有了这些专治卡顿的 APP,你的安卓手机竟能如丝般流畅顺滑?
  20. 2003年第三批全国名老中医

热门文章

  1. 【编译原理】编译原理系统学习与实践系列文章汇总目录(持续更新中)
  2. 新品发布 | 纳芯微推出集成隔离电源的隔离485接口和隔离CAN接口芯片NSiP83086 / NSiP1042
  3. 【keras】3. 泰坦尼克号数据集处理与预测
  4. HAL库学习之高级定时器输出PWM
  5. 信息安全软考 第十章 入侵检测技术原理应用
  6. android vibrator,Android入门教程之Vibrator(振动器)
  7. android 震动Vibrator
  8. 清理localstorage_何时清除localStorage?
  9. 传输层安全(TLS)笔记
  10. Mac电脑的隐私权限控制问题解决办法