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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
Python使用百度API上传文件到百度网盘代码分享
Nov 08 Python
利用python批量给云主机配置安全组的方法教程
Jun 21 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
python实现批量注册网站用户的示例
Feb 22 Python
python实现连连看辅助(图像识别)
Mar 25 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
pycharm sciview的图片另存为操作
Jun 01 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
Python基础之数据结构详解
Apr 28 Python
python中%格式表达式实例用法
Jun 18 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
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
phpinfo的知识点总结
2019/10/10 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
原生js实现日期联动
2015/01/12 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
详解JavaScript中的数据类型,以及检测数据类型的方法
2020/09/17 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
python读取注册表中值的方法
2013/04/08 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Django实现网页分页功能
2019/10/31 Python
python实现交并比IOU教程
2020/04/16 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
北京某公司的.net笔试题
2014/03/20 面试题
非常详细的C#面试题集
2016/07/13 面试题
应届毕业生自荐信
2014/05/28 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
天鹅湖观后感
2015/06/09 职场文书
单位接收证明格式
2015/06/18 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
AI:如何训练机器学习的模型
2021/04/16 Python
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang