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文件和目录操作详解
Feb 08 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
Oct 12 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
Python实现多级目录压缩与解压文件的方法
Sep 01 Python
python实现贪吃蛇游戏
Mar 21 Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
Python气泡提示与标签的实现
Apr 01 Python
Java如何基于wsimport调用wcf接口
Jun 17 Python
解决Python安装cryptography报错问题
Sep 03 Python
python中numpy数组与list相互转换实例方法
Jan 29 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
深入了解php4(1)--回到未来
2006/10/09 PHP
php allow_url_include的应用和解释
2010/04/22 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
php实现图片添加水印功能
2014/02/13 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
vue与django集成打包的实现方法
2019/11/11 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
python的迭代器与生成器实例详解
2014/07/16 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
Python可以实现栈的结构吗
2020/05/27 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
阿德的梦教学反思
2014/02/06 职场文书
商场租赁意向书
2014/07/30 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
python游戏开发之pygame实现接球小游戏
2022/04/22 Python