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检查字符串是否是正确ISBN的方法
Jul 11 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
儿童学习python的一些小技巧
May 27 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
python自动下载图片的方法示例
Mar 25 Python
Python实现寻找回文数字过程解析
Jun 09 Python
python利用opencv保存、播放视频
Nov 02 Python
python 实现的IP 存活扫描脚本
Dec 10 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
Python上下文管理器Content Manager
Jun 26 Python
Python常遇到的错误和异常
Nov 02 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获取网络文件的实现代码
2010/01/01 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
对js关键字命名的疑问介绍
2014/04/25 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
详解React中setState回调函数
2018/06/14 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
详解ES6中的 Set Map 数据结构学习总结
2018/11/06 Javascript
Vuex的actions属性的具体使用
2019/04/14 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
python生成日历实例解析
2014/08/21 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
python实现多进程代码示例
2018/10/31 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
tensorflow 查看梯度方式
2020/02/04 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
用 Python 制作地球仪的方法
2020/04/24 Python
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
怎么写好自荐书
2014/03/02 职场文书
环境卫生倡议书
2014/08/29 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server