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 相关文章推荐
Python3.x版本中新的字符串格式化方法
Apr 24 Python
Python实现的彩票机选器实例
Jun 17 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
Aug 08 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
python实现图书管理系统
Mar 12 Python
flask框架中勾子函数的使用详解
Aug 01 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
python构建基础的爬虫教学
Dec 23 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
python如何随机生成高强度密码
Aug 19 Python
Python获取指定网段正在使用的IP
Dec 14 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中的Session和Cookie
2013/06/21 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
js jquery数组介绍
2012/07/15 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
初步剖析C语言编程中的结构体
2016/01/16 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
公司周年庆典邀请函
2014/01/12 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
交通事故调解协议书
2014/04/16 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
减负增效提质方案
2014/05/23 职场文书
医学生求职自荐书
2014/06/12 职场文书
授权委托书协议书
2014/10/16 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers