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发送邮件的实例代码(支持html、图片、附件)
Mar 04 Python
Python使用Flask框架获取当前查询参数的方法
Mar 21 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python操作MongoDB详解及实例
May 18 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
Python接口自动化判断元素原理解析
Feb 24 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 Python
python实现简单聊天功能
Jul 07 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
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
javascript 禁止复制网页
2009/06/11 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
用Python解决计数原理问题的方法
2016/08/04 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python中单下划线_的常见用法总结
2018/07/10 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
python实现宿舍管理系统
2019/11/22 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
金融专业个人求职信
2013/09/22 职场文书
车贷收入证明范本
2014/01/09 职场文书
英语道歉信范文
2014/01/09 职场文书
单位租房协议书范本
2014/12/04 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
Go 中的空白标识符下划线
2022/03/25 Golang
nginx之内存池的实现
2022/06/28 Servers