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中将阿拉伯数字转换成中文的实现代码
May 19 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
10个Python小技巧你值得拥有
Sep 29 Python
python简单贪吃蛇开发
Jan 28 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
浅谈Python列表嵌套字典转化的问题
Apr 07 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 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来改写404错误页让你的页面更友好
2013/01/24 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
中止javascript执行的方法
2014/02/14 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
python实现批量转换图片为黑白
2020/06/16 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
经典的班主任推荐信
2013/10/28 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
《分数乘法》教学反思
2016/02/24 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书