Guest User

Untitled

a guest
Oct 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. """
  4. スレッドの使い方練習
  5. """
  6. import threading, time
  7. import collections
  8. import traceback
  9.  
  10. class Data:
  11. def __init__(self):
  12. self._stack = collections.deque()
  13.  
  14. for i in range(20):
  15. self._stack.append(i)
  16.  
  17. print len(self._stack)
  18. print self._stack
  19.  
  20.  
  21. def get_one(self):
  22. value = ''
  23. if self._stack:
  24. value = self._stack.popleft()
  25.  
  26. return value
  27.  
  28.  
  29. class Worker(threading.Thread):
  30. def __init__(self, v, list_data):
  31. threading.Thread.__init__(self)
  32.  
  33. self._d = list_data
  34. self.setName('T%s' % v)
  35. self.kill = False
  36. self.complete = False
  37.  
  38.  
  39. def run(self):
  40. self.get_elements()
  41.  
  42.  
  43. def get_elements(self):
  44. val = self._d.get_one()
  45. while val or val is 0:
  46. # Ctrl-C受けたらすっとばす
  47. if not self.kill:
  48. print '%s: %s' % (self.getName(), val)
  49. val = self._d.get_one()
  50. time.sleep(0.5)
  51. else:
  52. break
  53.  
  54. self.complete = True
  55. print '%s: End Thread!' % self.getName()
  56.  
  57.  
  58. def main(thread_count):
  59. threads = []
  60. data = Data()
  61.  
  62. # 指定された数だけスレッドを生成
  63. for i in range(thread_count):
  64. n = i+1
  65. w = Worker(n, data)
  66. threads.append(w)
  67. w.start()
  68.  
  69. count = len(threads)
  70. while count > 0:
  71. try:
  72. for t in threads:
  73. if t is not None and t.isAlive():
  74. t.join(1)
  75.  
  76. # これ忘れてて止まらなかった・・・
  77. if t.complete:
  78. count -= 1
  79.  
  80. except KeyboardInterrupt:
  81. print 'Ctrl-C received!'
  82. for t in threads:
  83. t.kill = True
  84.  
  85. count = 0
  86. except:
  87. print traceback.format_exc()
  88. count = 0
  89.  
  90.  
  91.  
  92.  
  93. if __name__ == '__main__':
  94. main(3)
Add Comment
Please, Sign In to add comment