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使用MD5加密字符串示例
Aug 22 Python
Python计算回文数的方法
Mar 11 Python
python中利用Future对象异步返回结果示例代码
Sep 07 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
Django实战之用户认证(初始配置)
Jul 16 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
在cmd中查看python的安装路径方法
Jul 03 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
pytorch中图像的数据格式实例
Feb 11 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
python 深度学习中的4种激活函数
Sep 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
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
利用JS如何计算字符串所占字节数示例代码
2017/09/13 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
小程序实现投票进度条
2019/11/20 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python实现定制交互式命令行的方法
2014/07/03 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
中级会计职业生涯规划范文
2014/01/16 职场文书
运动会解说词100字
2014/01/31 职场文书
总经理岗位职责描述
2014/02/08 职场文书
植物园观后感
2015/06/11 职场文书
立案决定书范文
2015/06/24 职场文书
旅游安全责任协议书
2016/03/22 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
使用python绘制分组对比柱状图
2022/04/21 Python
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技