无锁编程python(无锁编程多线程 不用锁)

2023-11-17 03:47:31 数码极客 bianji01

 

浅谈Python中的线程锁

是并发编程中的一个重要问题。当一个线程试图修改共享资源另一个线程正在修改该资源时,就会出现这种情况——这会导致输出乱码,这就是线程需要同步的原因。Python的threading模块包括作为同步工具。锁有两种状态:可以使用该acquire()方法锁定锁。一旦一个线程获得了锁,所有后续的获取锁的尝试都会被阻塞,直到它被释放。可以使用该reLEase()方法释放锁。以下代码通过一个简单的示例展示了如何在 Python 中使用锁:假设银行账户中有 100 美元。每个月存入 10 美元作为利润,扣除 10 美元支付账单。thread1用于存入利润,而thread2用于支付账单。在某些月份,利润会在账单支付后存入。但是,这不应影响帐户中的最终金额。,以下代码得到的结果可能不正确。可能会出现一个线程在上下文切换前无法将更新后的值写入共享变量deposit,而另一个线程读取到未更新的值的情况;因此,导致不可预测的结果。运行以上代码,将输出acquire()和release()方法之间的代码是执行的,因此在另一个线程已经进行更改之后,一个线程不可能读取未更新的版本。运行以上程序,将输出:

想学python从哪里入手

初学者学习Python需循序渐进,可以从以下内容入手学习:

1.Python基础知识

学习任何一门编程语言都需要学习相关语法知识,Python基础知识的学习主要包括Python解释器执行原理、字符编码、注释、变量、缩进、流程控制、文件操作、数据类型、数据类型内置方法、字符串格式化、运算符、输入输出、三元运算、collections、列表、字典、元组、集合、IO操作、文件增删改查、函数等。

2.函数和常用模块

函数和常用模块的学习内容主要包括装饰器原理和使用、高阶函数、迭代器与生成器、函数式编程、函数递归、二分查找、模块介绍、re正则模块、os\sys模块、subPRocess模块、shuti\shelve\itertools模块、hashlib模块、logging日志模块、time\datetime\traceback模块、json\pickle\yam\configparser处理模块、urllib\paramiko模块等。

3.面向对象

Python面向对象知识的学习主要包括面向对象和类介绍、创建类、经典类与新式类、面向对象的三大特性、类的普通成员、字段方法属性、类的高级成员、静态字段、静态方法、静态属性、类方法、MetaClass\AbstractClass、类成员修饰符等。

4.网络编程基础

Python网络编程基础学习内容包括Python模块Socketserver使用和源码剖析、GIL内部机制、线程锁、事件、生产者消费模型、进程的使用、进程间数据共享等。

5.数据库、缓存、队列

Python数据库、缓存、队列学习内容为Python操作redis、Python操作memcache、rabbitMQ消息队列、数据库介绍、mysql数据库安装使用、mysql管理、mysql数据类型、常用mysql命令、创建数据库、外键、增删改查表、权限、事务、索引、Python操作mysql等。

6.Web开发基础

Python之Web开发基础学习内容为HTML基础、CSS基础、JavaScript基础、局部变量和全局变量、集合、数组、字典、函数参数、原型、面向对象、作用域、dom编程、jquery介绍、jquery选择器、jquery属性和CSS操作、jquery文档处理、jquery筛选、jquery事件托管、jquery事件、jquery

ajax、jquery扩展方法、bootstrap使用、EasyUI介绍和使用等。

7.Web框架学习

Python之Web框架学习内容为Web框架本质、socket服务器、基于反射的路由系统、WSGI介绍及原理实现、开发自己的Web框架、MVC和MTV、路由系统、模板、django基础学习与使用、普通路由和动态路由、模板引擎、ORM介绍、Django

ORM增删改查学习、自定义tag、django进阶学习与使用、模型绑定、Form表单验证、Django

ORM进阶学习、ModelForm、自定义Validator等。

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告