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输出当前目录下index.html文件路径的方法
Apr 28 Python
RC4文件加密的python实现方法
Jun 30 Python
深入理解python多进程编程
Jun 12 Python
Python中的__slots__示例详解
Jul 06 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
python实现周期方波信号频谱图
Jul 21 Python
利用Python如何批量更新服务器文件
Jul 29 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
python django model联合主键的例子
Aug 06 Python
Python爬取知乎图片代码实现解析
Sep 17 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 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
PHP常用函数小技巧
2008/09/11 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
PHP实现动态获取函数参数的方法示例
2018/04/02 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
js跳转页面方法总结
2014/01/29 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
Vue axios与Go Frame后端框架的Options请求跨域问题详解
2020/03/03 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
前端性能优化建议
2020/09/17 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
python3编码问题汇总
2016/09/06 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
感恩父母的演讲稿
2014/05/06 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
销售辞职信范文
2015/03/02 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android
Python经常使用的一些内置函数
2022/04/11 Python