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中的reduce内建函数使用方法指南
Aug 31 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
详解在Python程序中解析并修改XML内容的方法
Nov 16 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
Jan 31 Python
python高级特性和高阶函数及使用详解
Oct 17 Python
Python搭建代理IP池实现存储IP的方法
Oct 27 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
利用Python优雅的登录校园网
Oct 21 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 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
PHP 简单日历实现代码
2009/10/28 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
EditPlus中的正则表达式 实战(4)
2016/12/15 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
详解Python_shutil模块
2019/03/15 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
合唱兴趣小组活动总结
2014/07/10 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
关于分班的感言
2015/08/04 职场文书
react如何快速设置文件路径别名
2021/04/28 Javascript
浅谈Python类的单继承相关知识
2021/05/12 Python
idea下配置tomcat避坑详解
2022/04/12 Servers
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby