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的Flask框架中实现全文搜索功能
Apr 20 Python
python列表操作之extend和append的区别实例分析
Jul 28 Python
Python批量修改文本文件内容的方法
Apr 29 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
详解python之heapq模块及排序操作
Apr 04 Python
如何使用python操作vmware
Jul 27 Python
django项目用higcharts统计最近七天文章点击量
Aug 17 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
python爬取youtube视频的示例代码
Mar 03 Python
Django实现聊天机器人
May 31 Python
Python Matplotlib绘制条形图的全过程
Oct 24 Python
python双向链表实例详解
May 25 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获取mysql版本的几种方法小结
2008/03/25 PHP
smarty简单入门实例
2014/11/28 PHP
Web程序工作原理详解
2014/12/25 PHP
php实现修改新闻时删除图片的方法
2015/05/12 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
JS常用字符串方法(推荐)
2021/01/15 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python3.x中安装web.py步骤方法
2020/06/23 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
进程的查看和调度分别使用什么命令
2013/12/14 面试题
红领巾广播站广播稿
2014/02/01 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
同学聚会通知书
2015/04/20 职场文书
民事辩护词范文
2015/05/21 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL