1. [root@bogon python]# cat test.py
  2. #!/usr/bin/ptyhon
  3. import thread
  4. import time
  5. def print_time(threadName,delay):
  6. count=0
  7. while count<5:
  8. time.sleep(delay)
  9. count+1
  10. print "%s: %s"%(threadName,time.ctime(time.time()))
  11. try:
  12. thread.start_new_thread(print_time,('Thread 1:',1))
  13. thread.start_new_thread(print_time,('Thread 2:',2))
  14. except:
  15. print 'error:fail to start'
  16. while 1:
  17. pass
  18. [root@bogon python]# python test.py
  19. Thread 1:: Sun Jun 18 18:00:01 2017
  20. Thread 2:: Sun Jun 18 18:00:02 2017
  21. Thread 1:: Sun Jun 18 18:00:02 2017
  22. Thread 1:: Sun Jun 18 18:00:03 2017
  23. //线程模块
  24. [root@bogon python]# cat b.py
  25. #!/usr/bin/python
  26. import threading
  27. import time
  28. exitFlag=0
  29. class myThread(threading.Thread):
  30. def __init__(self,threadID,name,counter):
  31. threading.Thread.__init__(self)
  32. self.threadID=threadID
  33. self.name=name
  34. self.counter=counter
  35. def run(self):
  36. print "Starting ",self.name
  37. print_time(self.name,self.counter,5)
  38. print "exiting "+self.name
  39. def print_time(threadName,delay,counter):
  40. while counter:
  41. if exitFlag:
  42. threading.Thread.exit()
  43. time.sleep(delay)
  44. print "%s: %s"%(threadName,time.ctime(time.time()))
  45. counter-=1
  46. thread1=myThread(1,'Thread 1: ',1)
  47. thread2=myThread(2,'Thread 2: ',2)
  48. thread1.start()
  49. thread2.start()
  50. print "exiting main thread"
  51. [root@bogon python]# ./b.py
  52. Starting Thread 1:
  53. Starting Thread 2:
  54. exiting main thread
  55. Thread 1: : Sun Jun 18 18:15:24 2017
  56. Thread 1: : Sun Jun 18 18:15:25 2017
  57. Thread 2: : Sun Jun 18 18:15:25 2017
  58. Thread 1: : Sun Jun 18 18:15:26 2017
  59. Thread 1: : Sun Jun 18 18:15:27 2017
  60. Thread 2: : Sun Jun 18 18:15:27 2017
  61. Thread 1: : Sun Jun 18 18:15:28 2017
  62. exiting Thread 1:
  63. Thread 2: : Sun Jun 18 18:15:29 2017
  64. Thread 2: : Sun Jun 18 18:15:31 2017
  65. Thread 2: : Sun Jun 18 18:15:33 2017
  66. exiting Thread 2:
  67. [root@bogon python]#
  68. //线程同步
  69. [root@bogon python]# cat c.py
  70. #!/usr/bin/python
  71. # -*- coding: UTF-8 -*-
  72. import threading
  73. import time
  74. class myThread (threading.Thread):
  75. def __init__(self, threadID, name, counter):
  76. threading.Thread.__init__(self)
  77. self.threadID = threadID
  78. self.name = name
  79. self.counter = counter
  80. def run(self):
  81. print "Starting " + self.name
  82. # 获得锁,成功获得锁定后返回True
  83. # 可选的timeout参数不填时将一直阻塞直到获得锁定
  84. # 否则超时后将返回False
  85. threadLock.acquire()
  86. print_time(self.name, self.counter, 3)
  87. # 释放锁
  88. threadLock.release()
  89. def print_time(threadName, delay, counter):
  90. while counter:
  91. time.sleep(delay)
  92. print "%s: %s" % (threadName, time.ctime(time.time()))
  93. counter -= 1
  94. threadLock = threading.Lock()
  95. threads = []
  96. # 创建新线程
  97. thread1 = myThread(1, "Thread-1", 1)
  98. thread2 = myThread(2, "Thread-2", 2)
  99. # 开启新线程
  100. thread1.start()
  101. thread2.start()
  102. # 添加线程到线程列表
  103. threads.append(thread1)
  104. threads.append(thread2)
  105. # 等待所有线程完成
  106. for t in threads:
  107. t.join()
  108. print "Exiting Main Thread"
  109. [root@bogon python]# ./c.py
  110. Starting Thread-1
  111. Starting Thread-2
  112. Thread-1: Sun Jun 18 18:25:39 2017
  113. Thread-1: Sun Jun 18 18:25:40 2017
  114. Thread-1: Sun Jun 18 18:25:41 2017
  115. Thread-2: Sun Jun 18 18:25:43 2017
  116. Thread-2: Sun Jun 18 18:25:45 2017
  117. Thread-2: Sun Jun 18 18:25:47 2017
  118. Exiting Main Thread
  119. [root@bogon python]#
  120. //线程的优先级队列
  121. #!/usr/bin/python
  122. # -*- coding: UTF-8 -*-
  123. import Queue
  124. import threading
  125. import time
  126. exitFlag = 0
  127. class myThread (threading.Thread):
  128. def __init__(self, threadID, name, q):
  129. threading.Thread.__init__(self)
  130. self.threadID = threadID
  131. self.name = name
  132. self.q = q
  133. def run(self):
  134. print "Starting " + self.name
  135. process_data(self.name, self.q)
  136. print "Exiting " + self.name
  137. def process_data(threadName, q):
  138. while not exitFlag:
  139. queueLock.acquire()
  140. if not workQueue.empty():
  141. data = q.get()
  142. queueLock.release()
  143. print "%s processing %s" % (threadName, data)
  144. else:
  145. queueLock.release()
  146. time.sleep(1)
  147. threadList = ["Thread-1", "Thread-2", "Thread-3"]
  148. nameList = ["One", "Two", "Three", "Four", "Five"]
  149. queueLock = threading.Lock()
  150. workQueue = Queue.Queue(10)
  151. threads = []
  152. threadID = 1
  153. # 创建新线程
  154. for tName in threadList:
  155. thread = myThread(threadID, tName, workQueue)
  156. thread.start()
  157. threads.append(thread)
  158. threadID += 1
  159. # 填充队列
  160. queueLock.acquire()
  161. for word in nameList:
  162. workQueue.put(word)
  163. queueLock.release()
  164. # 等待队列清空
  165. while not workQueue.empty():
  166. pass
  167. # 通知线程是时候退出
  168. exitFlag = 1
  169. # 等待所有线程完成
  170. for t in threads:
  171. t.join()
  172. print "Exiting Main Thread"
  173. 以上程序执行结果:
  174. Starting Thread-1
  175. Starting Thread-2
  176. Starting Thread-3
  177. Thread-1 processing One
  178. Thread-2 processing Two
  179. Thread-3 processing Three
  180. Thread-1 processing Four
  181. Thread-2 processing Five
  182. Exiting Thread-3
  183. Exiting Thread-1
  184. Exiting Thread-2
  185. Exiting Main Thread
  186. ....

python基础(八)——多线程的更多相关文章

  1. python基础之多线程与多进程(二)

    上课笔记整理: 守护线程的作用,起到监听的作用 一个函数连接数据库 一个做守护线程,监听日志 两个线程同时取一个数据 线程---->线程安全---->线程同时进行操作数据. IO操作--- ...

  2. python基础-12 多线程queue 线程交互event 线程锁 自定义线程池 进程 进程锁 进程池 进程交互数据资源共享

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  3. python基础之多线程与多进程(一)

    并发编程? 1.为什么要有操作系统? 操作系统,位于底层硬件与应用软件之间 工作方式:向下管理硬件,向上提供接口 2.多道技术? 不断切换程序. 操作系统进程切换: 1.出现IO操作 2.固定时间 进 ...

  4. python语言(八)多线程、多进程、虚拟环境、unittest、生成测试报告

    一.多线程 进程与线程 进程:进程是资源(CPU.内存等)分配的最小单位,进程有独立的地址空间与系统资源,一个进程可以包含一个或多个线程 线程:线程是CPU调度的最小单位,是进程的一个执行流,线程依赖 ...

  5. python基础(八)面向对象的基本概念

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢逆水寒龙,topmad和Liqing纠错 Python使用类(class)和对 ...

  6. python基础之多线程锁机制

    GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念,是为了实现不同线程对共享资源访问的互斥,才引入了GIL 在Cpython解释器 ...

  7. Python基础 — 八种数据类型

    Python 3.x 的八种数据类型 八种数据类型分别是: number(数字).string(字符串).Boolean(布尔值).None(空值) list(列表).tuple(元组).dict(字 ...

  8. python基础八

    面向对象的好处 更容易扩展.提高代码使用效率,使你的代码组织性更强, 更清晰,更适合复杂项目的开发 封装 把功能的实现细节封装起来,只暴露调用接口 继承 多态 接口的继承 定义 类   ===> ...

  9. python基础(八)生成器,迭代器,装饰器,递归

    生成器 在函数中使用yield关键字就会将一个普通的函数变成一个生成器(generator),普通的函数只能使用return来退出函数,而不执行return之后的代码.而生成器可以使用调用一个next ...

  10. Python基础(八) yaml在python中的使用

    yaml 通常用来存储数据,类似于json YAML 简介 YAML(Yet Another Markup Language),一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅 ...

随机推荐

  1. Struts1的基础知识

    struts1.0的配置 在web.xml文件中的配置 <servlet> <!--配置ActionServlet类,一启动就创建该类对象--> <servlet-nam ...

  2. python 爬虫之 selenium API

    一.浏览器操作 1.浏览器最大化 driver.maximize_window() #将浏览器最大化显示 2.设置浏览器宽.高 driver.set_window_size(480, 800)#设置浏 ...

  3. c# 关于async/await异步编程的浅析和使用

    线程的同步运行,时效性慢,异步运行,时效性快! 在c#5.0引出了async/await关键字,可以用其来进行异步编程. async/await定义异步方法的语法如下: 1.在方法的返回类型前面加上a ...

  4. PC/FORTH 编辑程序

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  5. 前端基础之jQuery事件

    一.常用事件 click(function(){...}) hover(function(){...}) blur(function(){...}) focus(function(){...}) ch ...

  6. 九. Python基础(9)--命名空间, 作用域

    九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...

  7. 插入排序算法 Java实现

    插入排序算法是算法排序中的一种: 该算法是假设已有序列是有序序列,从首元素(首元素为单个元素,肯定是有序的...)开始分析,对其他元素的位置进行有序的确定: 以算法为例: public class I ...

  8. php +apache +mysql 配置笔记

    2013年11月5日 14:27:46 php +apache +mysql 配置笔记 mysql 正常安装 忽略. 1,配置笔记:安装apache 的成功标志是:安装完成之后,在浏览器输入http: ...

  9. 解决Detected problems with API compatibility...

    如果是10.3.0那么targetsdk改28.

  10. IE8的input兼容性问题

    在chrome.firefox.IE9+都是支持input事件 在IE8中,单纯的input事件无法监听输入框中变化,需要与propertychange共用 测试代码如下: <!DOCTYPE ...