Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9563470
  • 博文数量: 1760
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20191
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1760)

文章存档

2025年(9)

2024年(27)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: Android平台

2017-12-08 11:13:49

http://blog.csdn.net/crazy_fire/article/details/7506239

  Queue是标准模块所以可以直接import,用起来就像是个真正的队列,先进先出的原则,这样进程间就可以用这个数据了,丫丫的,这个可好了。还是那个经典的生产者和消费者关系开始吧,书上讲的不通俗,记得记得学MFC时候那个孙鑫就介绍的比较容易接受。好了,切入主题。

   有一个生产线,一个消费线,那么我们要做的就是消费的不能比生产的要多。脚本如下:


点击(此处)折叠或打开

  1. #!/usr/bin/env python

  2. '''
  3. Created on Apr 25, 2012

  4. @author: stedy
  5. '''
  6. #coding=cp936
  7. from random import randint
  8. from time import sleep,ctime
  9. from Queue import Queue
  10. import threading
  11.      
  12. class MyThread(threading.Thread):
  13.     def __init__(self,func,args,name=""):
  14.         threading.Thread.__init__(self)
  15.         self.name = name
  16.         self.func = func
  17.         self.args = args
  18.     def getResult(self):
  19.         return self.res
  20.     def run(self):
  21.         print 'stating',self.name,'at',ctime()
  22.         self.func(*self.args)
  23.         
  24. def writeQ(queue):
  25.     i = randint(1,100)
  26.     print 'producing object for Q...',queue.put(i,1)
  27.         
  28. def readQ(queue):
  29.     if queue.empty() == False:
  30.         val = queue.get(1)
  31.         print 'value from Q',val
  32.     else:
  33.         print "no value,wait a moment"
  34.         sleep(1)
  35.            
  36.      
  37. def writer(queue,loops):
  38.     for i in range(loops):
  39.         writeQ(queue)
  40.         sleep(randint(1,3))
  41.      
  42. def reader(queue,loops):
  43.     for i in range(loops):
  44.         readQ(queue)
  45.         sleep(randint(1,3))
  46.      
  47. funcs = [reader,writer]
  48. nfuncs = range(len(funcs))
  49.      
  50. def main():
  51.     nloops = 99
  52.     q = Queue(100)
  53.        
  54.     threads = []
  55.     for i in nfuncs:
  56.         t = MyThread(funcs[i],(q,nloops),funcs[i].__name__)
  57.         threads.append(t)
  58.     
  59.     for i in nfuncs:
  60.         threads[i].start()
  61.        
  62.     for i in nfuncs:
  63.         threads[i].join()
  64.     print 'all Done'
  65.      
  66. if __name__ == '__main__':
  67.     main()

运行结果

点击(此处)折叠或打开

  1. stating reader at Wed Apr 25 21:55:03 2012
  2. no value,wait a moment
  3. stating writer at Wed Apr 25 21:55:03 2012
  4. producing object for Q... None
  5. value from Q 65
  6. producing object for Q... None
  7. value from Q 94
  8. producing object for Q... None
  9. producing object for Q... None
  10. value from Q 80
  11. producing object for Q... None
  12. value from Q 6
  13. producing object for Q... None
  14. value from Q 17
  15. producing object for Q... None
  16. producing object for Q... None
  17. value from Q 11
  18. producing object for Q... None
  19. value from Q 33
  20. producing object for Q... None
  21. value from Q 46
  22. producing object for Q... None
  23. producing object for Q... None
  24. producing object for Q... None
  25. value from Q 14
  26. value from Q 13
  27. producing object for Q... None
  28. value from Q 47
  29. producing object for Q... None
  30. value from Q 50
  31. producing object for Q... None
  32. value from Q 54
  33. producing object for Q... None
  34. producing object for Q... None
  35. value from Q 17
  36. producing object for Q... None
  37. producing object for Q... None
  38. value from Q 44
  39. value from Qproducing object for Q... None
  40.  26
  41. producing object for Q... None
  42. value from Q 77
  43. producing object for Q... None
  44. value from Q 38
  45. producing object for Q... None
  46. value from Q 14
  47. value from Q 29
  48. producing object for Q... None
  49. value from Q 58
  50. producing object for Q... None
  51. value from Q 71
  52. producing object for Q... None
  53. value from Q 47
  54. producing object for Q... None
  55. value from Q 70
  56. producing object for Q... None
  57. value from Q 69
  58. producing object for Q...value from Q 20
  59. None
  60. producing object for Q... None
  61. value from Q 22
  62. producing object for Q... None
  63. value from Q 96
  64. producing object for Q... None
  65. producing object for Q...value from Q 52None

  66. value from Q 63
  67. producing object for Q... None
  68. value from Q 79
  69. producing object for Q... None
  70. value from Q 99
  71. value from Q 6
  72. producing object for Q... None
  73. value from Q 36
  74. producing object for Q... None
  75. value from Q 64
  76. producing object for Q... None
  77. value from Q 26
  78. producing object for Q... None
  79. value from Q 37
  80. producing object for Q... None
  81. value from Q 13
  82. producing object for Q... None
  83. value from Q 41
  84. producing object for Q... None
  85. value from Q 20
  86. producing object for Q... None
  87. value from Q 33
  88. value from Q 26
  89. producing object for Q... None
  90. value from Q 21
  91. producing object for Q... None
  92. value from Q 50
  93. value from Q 33
  94. producing object for Q... None
  95. value from Q 45
  96. producing object for Q... None
  97. value from Q 31
  98. producing object for Q... None
  99. producing object for Q... None
  100. value from Q 39
  101. producing object for Q... None
  102. value from Q 90
  103. producing object for Q... None
  104. producing object for Q... None
  105. value from Q 78
  106. producing object for Q... None
  107. producing object for Q... None
  108. value from Q 84
  109. producing object for Q... None
  110. producing object for Q... None
  111. value from Q 44
  112. producing object for Q... None
  113. value from Q 78
  114. value from Q 17
  115. producing object for Q... None
  116. value from Q 7
  117. value from Q 7
  118. producing object for Q... None
  119. value from Q 41
  120. value from Q 71
  121. producing object for Q... None
  122. value from Q 57
  123. producing object for Q... None
  124. value from Q 65
  125. producing object for Q... None
  126. value from Q 12
  127. value from Q 1
  128. producing object for Q... None
  129. producing object for Q... None
  130. value from Q 97
  131. value from Q 65
  132. producing object for Q... None
  133. value from Q 48
  134. producing object for Q... None
  135. producing object for Q... None
  136. value from Q 1
  137. producing object for Q... None
  138. value from Q 58
  139. value from Q 62
  140. producing object for Q... None
  141. value from Q 91
  142. producing object for Q... None
  143. value from Q 87
  144. producing object for Q... None
  145. value from Q 92
  146. producing object for Q... None
  147. value from Q 23
  148. value from Q 15
  149. producing object for Q... None
  150. producing object for Q... None
  151. value from Q 77
  152. producing object for Q... None
  153. producing object for Q... None
  154. value from Q 3
  155. value from Q 33
  156. producing object for Q... None
  157. producing object for Q... None
  158. value from Q 87
  159. producing object for Q... None
  160. value from Q 94
  161. producing object for Q... None
  162. producing object for Q... None
  163. value from Q 89
  164. producing object for Q... None
  165. value from Q 48
  166. producing object for Q... None
  167. producing object for Q... None
  168. value from Q 65
  169. producing object for Q... None
  170. value from Q 55
  171. producing object for Q... None
  172. producing object for Q... None
  173. value from Q 28
  174. producing object for Q... None
  175. producing object for Q... None
  176. value from Q 61
  177. producing object for Q... None
  178. value from Q 47
  179. producing object for Q... None
  180. value from Q 16
  181. producing object for Q... None
  182. value from Q 77
  183. producing object for Q... None
  184. value from Q 86
  185. producing object for Q... None
  186. value from Q 39
  187. value from Q 20
  188. producing object for Q... None
  189. value from Q 63
  190. value from Q 13
  191. producing object for Q... None
  192. producing object for Q... None
  193. value from Q 57
  194. producing object for Q... None
  195. value from Q 12
  196. value from Q 9
  197. value from Q 42
  198. value from Q 70
  199. value from Q 65
  200. all Done

我们提取Queue的部分来看,首先是创建一个队列这是一个全局变量,当然是main内的’全局‘,这个变量给谁用呢?当然是给各个线程的函数用了,这里的数据就是能够共享的数据。

    存入数据的函数是put简单吧,直接把数据给放入进去,取出的就是get也简单啊,不管你在函数的什么地方用都可以看到这两个函数那么我们开始担心的问题其实用这连个函数就可以搞定了,就是如果消费的数量多于生产的数量,put(value,block=0)如果我们将第二个参数设置不为0的数据,那么函数就等待到队列中有空间为止,那样线程不就挂起了吗,所以生产商就有时间生产了啊,同样如果get(block=0)函数如果参数不为0同样的等待队列有数据时候才退出。呵呵,这模样,队列这个东西很好用啊




阅读(2208) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~