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的Django框架中的ORM建立查询API
Apr 20 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
python实现爬取图书封面
Jul 05 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
django-初始配置(纯手写)详解
Jul 30 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
Python3实现飞机大战游戏
Apr 24 Python
Python collections.defaultdict模块用法详解
Jun 18 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
python unittest单元测试的步骤分析
Aug 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+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
php cookie 详解使用实例
2016/11/03 PHP
jQuery之折叠面板的深入解析
2013/06/19 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
js比较日期大小的方法
2015/05/12 Javascript
Node.js事件驱动
2015/06/18 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
2016/06/03 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
TensorFlow 多元函数的极值实例
2020/02/10 Python
Pycharm github配置实现过程图解
2020/10/13 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
SQL数据库笔试题
2016/03/08 面试题
公司年会主持词
2014/03/22 职场文书
团日活动总结
2014/04/28 职场文书
学校献爱心活动总结
2014/07/08 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技
MySQL使用IF语句及用case语句对条件并结果进行判断 
2022/09/23 MySQL