Python多线程编程之多线程加锁操作示例


Posted in Python onSeptember 06, 2018

本文实例讲述了Python多线程编程之多线程加锁操作。分享给大家供大家参考,具体如下:

Python语言本身是支持多线程的,不像PHP语言。

下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。

# -*- coding:utf-8 -*-
#! python2
import threading
start_task = 0
task_num = 10000
mu = threading.Lock()  ###通过工厂方法获取一个新的锁对象
class MyThread(threading.Thread):  ###类MyThread继承基类threading.Thread
  def run(self): ##线程启动的入口函数,子类需重写
    global start_task
    global mu
    global start_task
    while start_task < task_num:  ##如果任务没有完成,则继续
      if mu.acquire():  ##加锁
        if start_task < task_num:
          print start_task
          start_task = start_task + 1
        mu.release()  ##释放锁
def test():
  thread_all = []
  for i in range(6): ##for循环创建6个线程
    t = MyThread() ##创建线程
    thread_all.append(t)
    t.start()  ###启动线程
  for i in range(6):
    thread_all[i].join()  ##等待线程结束
if __name__ == "__main__":
  test()

运行上述代码,则输出1~9999

测试加锁与不加锁效果:将任务数设置为1千万或者以上,在多核机器上将print输出分别保存,就能说明问题。

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

Python 相关文章推荐
Python获取apk文件URL地址实例
Nov 01 Python
pycharm 使用心得(五)断点调试
Jun 06 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
详解Python中DOM方法的动态性
Apr 11 Python
Python+django实现文件上传
Jan 17 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
python中实现延时回调普通函数示例代码
Sep 08 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
python面试题小结附答案实例代码
Apr 11 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 #Python
Python json模块dumps、loads操作示例
Sep 06 #Python
Python 字符串换行的多种方式
Sep 06 #Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 #Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 #Python
python使用__slots__让你的代码更加节省内存
Sep 05 #Python
Python中__slots__属性介绍与基本使用方法
Sep 05 #Python
You might like
在IIS上安装PHP4.0正式版
2006/10/09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
Python的一些用法分享
2012/10/07 Python
Python数据操作方法封装类实例
2017/06/23 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
经典C++面试题一
2016/11/06 面试题
俄语专业职业生涯规划
2014/02/26 职场文书
卫生系统先进事迹
2014/05/13 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
《去年的树》教学反思
2016/02/18 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫
排查MySQL生产环境索引没有效果
2022/04/11 MySQL