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 logging类库使用例子
Nov 22 Python
python 远程统计文件代码分享
May 14 Python
Python将多个list合并为1个list的方法
Jun 27 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
Python生成词云的实现代码
Jan 14 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
python 命名规范知识点汇总
Feb 14 Python
详解python爬取弹幕与数据分析
Nov 14 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
Python echarts实现数据可视化实例详解
Mar 03 Python
Python内置数据类型中的集合详解
Mar 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
php cli换行示例
2014/04/22 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
详解小程序input框失焦事件在提交事件前的处理
2019/05/05 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
详解Vue中的watch和computed
2020/11/09 Javascript
Python 文件和输入输出小结
2013/10/09 Python
连接Python程序与MySQL的教程
2015/04/29 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Django添加feeds功能的示例
2018/08/07 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
python数据化运营的重要意义
2019/11/25 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
2015年计划生育责任书
2015/05/08 职场文书
勤俭节约主题班会
2015/08/13 职场文书
股权投资协议书
2016/03/23 职场文书