Python实现的多线程同步与互斥锁功能示例


Posted in Python onNovember 30, 2017

本文实例讲述了Python实现的多线程同步与互斥锁功能。分享给大家供大家参考,具体如下:

#! /usr/bin/env python
#coding=utf-8
import threading
import time
'''
#1、不加锁
num = 0
class MyThread(threading.Thread):
  def run(self):
    global num
    time.sleep(1) #一定要sleep!!!
    num = num + 1
    msg = self.name + ' num is ---- ' + str(num)
    print msg
def test():
  for i in range(10):
    s = MyThread() #实例化一个Thread对象,每个Thread对象代表着一个线程
    s.start() #通过start()方法,开始线程活动
'''
#'''
class MyThread(threading.Thread):
  def run(self):
    for i in range(3):
      time.sleep(1)
      msg = self.name+' @ '+str(i)
      print msg
def test():
  for i in range(5):
    t = MyThread()
    t.start()
#'''
'''
#2、加锁
num = 0 #多个线程共享操作的数据
mu = threading.Lock() #创建一个锁
class MyThread(threading.Thread):
  def run(self):
    global num
    time.sleep(1)
    if mu.acquire(True): #获取锁状态,一个线程有锁时,别的线程只能在外面等着
      num = num + 1
      msg = self.name + ' num is ---- ' + str(num)
      print msg
      mu.release() #释放锁
def test():
  for i in range(10):
    s = MyThread()
    s.start()
'''
if __name__ == '__main__':
  test()

运行结果:

Python实现的多线程同步与互斥锁功能示例

再分别运行注释中的每一部分代码:

1. 不加锁:

Python实现的多线程同步与互斥锁功能示例

2. 加锁:

Python实现的多线程同步与互斥锁功能示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中MYSQLdb出现乱码的解决方法
Oct 11 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
对Django 中request.get和request.post的区别详解
Aug 12 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
python如何获取apk的packagename和activity
Jan 10 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
PyQt5的相对布局管理的实现
Aug 07 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 Python
Python FuzzyWuzzy实现模糊匹配
Apr 28 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 #Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 #Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 #Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 #Python
Python科学画图代码分享
Nov 29 #Python
Python中Scrapy爬虫图片处理详解
Nov 29 #Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 #Python
You might like
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
thinkPHP实现MemCache分布式缓存功能
2016/03/23 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
使用Python的内建模块collections的教程
2015/04/28 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
Python异常处理知识点总结
2019/02/18 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
python tkinter canvas使用实例
2019/11/04 Python
Python通过socketserver处理多个链接
2020/03/18 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
CSS3实现精美横向滚动菜单按钮
2017/04/14 HTML / CSS
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
全球性的在线购物网站:Zapals
2017/03/22 全球购物
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
比较node.js和Deno
2021/04/27 Javascript