python
threading
多线程

一. Threading简介

首先看下面的没有用Threading的程序


  1. ): 

  2. s += i 

  3. time.sleep( 



  4. ): 

  5. s += i 

  6. time.sleep()] 



  7. ): 

  8. print() 

  9. ): 

  10. print( 

  11. threading:  

  12. threading:  

  13. 主线程等待t这个线程 

  14. threading:  

  15. Main:  

  16. threading:  

  17. Main:  

  18. threading:  

  19. Main:  

  20. threading:  

  21. Main:  

  22. threading:  

  23. Main:  

  24. threading:  

  25. Main:  

  26. threading:  

  27. Main:  

  28. Main:  

  29. Main:  

  30. [Finished ) 

  31. print() 

  32. print(  

  33. lock = threading.Lock() ): 

  34. lock.acquire() 

  35. print(share) 

  36. share += self.i 

  37. time.sleep(random.random()) 

  38. print() 

  39. tt = MyThread() 

  40. t.start() 

  41. tt.start() 


  42. >>> 


  43. + =  


  44. + =  


  45. + =  


  46. + =  

  47. [Finished ):  



  48. + =  


  49. + =  


  50. + =  

  51. + =  

  52. [Finished  


  53. share_cond = threading.Condition() 



  54. print(self.name,share) 

  55. share_cond.notify() ) 






  56. Custom  

  57. Produce  

  58. Custom  

  59. Produce  

  60. Custom  

  61. ... 

  62. ... 

  63. ... 

上面的结果会一直重复执行下去

3 ) 信号量threading.Semaphore

属性

  • 实例化时,指定使用量。

  • 其内置计数器,锁定时+1,
    释放时-1,计数器为0则阻塞。

  • acquire(blocking=True,timeout=None)

  • release()释放锁。






  1. sema.release() 

  2. print(self.name,)] 

  3. Sema Had got resource. 

  4. Sema Had got resource. 

  5. Sema Had got resource. 

  6. Sema Had released resource. 

  7. Sema Had got resource. 

  8. Sema Had released resource. 

  9. Sema Had released resource. 

  10. Sema Had got resource. 

  11. Sema Had released resource. 

  12. Sema Had released resource. 

  13. [Finished ) 

  14. print('Main thread set event flag!') 

  15. event.set() 


  16. if __name__ == '__main__': 

  17. thw = MyThreadWait() 

  18. thm = MyThreadMain() 

  19. thw.start() 

  20. thm.start() 


  21. >>> 

  22. Wait Thread Wait... 

  23. Main thread set event flag! 

  24. Wait Thread Start... 

  25. [Finished in 3.6s] 

好了,大概就是这些了,其他的以后再补充,另外感谢麦子学院提供的免费课程~~~真心不是打广告
为了避嫌,顺便感谢一下imooc,极客学院~很多都是从这些造福人类的网站学到的。
另附上麦子学院的视频教程,毕竟要学会感恩嘛
http://www.maiziedu.com/course/644-9663/

marsggbo笔记出品,必属精品

python多线程学习笔记(超详细)的更多相关文章

  1. Java多线程学习(吐血超详细总结)

    Java多线程学习(吐血超详细总结) 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实 ...

  2. Python多线程学习笔记

    Python中与多线程相关的模块有 thread, threading 和 Queue等,thread 和threading模块允许程序员创建和管理线程.thread模块提供了基本的线程和锁的支持,而 ...

  3. maven学习笔记(超详细总结)

    目录 项目管理利器--maven 第1章 maven概述 1-1 项目管理利器-maven简介 1.1.1 什么是maven 1.1.2 什么是依赖管理 1.1.3 传统项目的依赖管理 1.1.4 m ...

  4. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  5. java多线程学习笔记——详细

    一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...

  6. java进阶-多线程学习笔记

    多线程学习笔记 1.什么是线程 操作系统中 打开一个程序就是一个进程 一个进程可以创建多个线程 现在系统中 系统调度的最小单元是线程 2.多线程有什么用? 发挥多核CPU的优势 如果使用多线程 将计算 ...

  7. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  8. Python Click 学习笔记(转)

    原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...

  9. JAVA多线程学习笔记(1)

    JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...

随机推荐

  1. Linux文件权限及用户管理

    /etc/passwd文件与 /etc/shadow文件/etc/passwd文件/etc/passwd文件主要存放登录名.UID等用户相关信息,用户登录密码存放在/etc/shadow文件中.例子: ...

  2. java学习阶段三:运算符和结构学习

    import java.util.Scanner;/* * JAVA中运算符的学习: * 算术运算符:+.-.*./ 和 %,两个整数相除,结果还是整数. * 赋值运算符:=.+=.-=.*=./=. ...

  3. 如何在 Windows上编译Objective-C

    Objective-C现在几乎已经变成了苹果的专利了,可以直接在苹果的Xcode上编译Objective-C程序,但是在Windows平台下的编译工具就寥寥无几了,本身这种语言用的人就不是很多.今天在 ...

  4. BZOJ 2142: 礼物

    模非素数下的排列组合,简直凶残 调着调着就过了= = 都不知道怎么过的= = 直接上链接http://hi.baidu.com/aekdycoin/blog/item/147620832b567eb4 ...

  5. LNMP系统服务搭建过程详解

    和LAMP不同的是LNMP中的N指的是Nginx(类似于Apache的一种web服务软件)其他都一样.目前这种环境应用的也是非常之多.Nginx设计的初衷是提供一种快速高效多并发的web服务软件.在静 ...

  6. Java显式锁学习总结之二:使用AbstractQueuedSynchronizer构建同步组件

    Jdk1.5中包含了并发大神Doug Lea写的并发工具包java.util.concurrent,这个工具包中包含了显示锁和其他的实用同步组件.Doug Lea在构建锁和组件的时候,大多是以队列同步 ...

  7. 【排序算法】快速排序算法 Java实现

    快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 基本思想 先从数组中找出一个数作为基 ...

  8. Debian部署RMI异常:java.rmi.ConnectException: Connection refused to host: 127.0.1.1;

    现象:在windows上部署RMI很顺利,但移到debian上部署后,客户端报异常: java.rmi.ConnectException: Connection refused to host: 12 ...

  9. C++ 11 学习3:显示虚函数重载(override)

    5.显示虚函数重载 在 C++ 里,在子类中容易意外的重载虚函数.举例来说: struct Base { virtual void some_func(); }; struct Derived : B ...

  10. sql查询表说明

    一条神奇的sql语句 可以查询到数据库表的说明信息.如下:希望可以帮到大家 SELECT 表名 = case when a.colorder=1 then d.name else '' end, 表说 ...