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中的sort方法使用详解
Jul 25 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
浅谈python中的占位符
Nov 09 Python
在Pycharm中将pyinstaller加入External Tools的方法
Jan 16 Python
Django 框架模型操作入门教程
Nov 05 Python
Python函数参数类型及排序原理总结
Dec 19 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
Python竟然能剪辑视频
May 25 Python
python 镜像环境搭建总结
Sep 23 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
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
vue中的scope使用详解
2017/10/29 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
中职生自我鉴定范文
2013/10/03 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
校园绿化美化方案
2014/06/08 职场文书
思想作风建设心得体会
2014/10/22 职场文书
技术员岗位职责
2015/02/04 职场文书
运动会报道稿大全
2015/07/23 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏