zoukankan      html  css  js  c++  java
  • 队列

     1 #实现一个线程不断生成一个随机数到一个队列中(考虑使用Queue这个模块)
     2 # 实现一个线程从上面的队列里面不断的取出奇数
     3 # 实现另外一个线程从上面的队列里面不断取出偶数
     4 
     5 import random,threading,time
     6 from queue import Queue
     7 #Producer thread
     8 class Producer(threading.Thread):
     9   def __init__(self, t_name, queue):
    10     threading.Thread.__init__(self,name=t_name)
    11     self.data=queue
    12   def run(self):
    13     for i in range(10):  #随机产生10个数字 ,可以修改为任意大小
    14       randomnum=random.randint(1,99)
    15       print ("%s: %s is producing %d to the queue!" % (time.ctime(), self.getName(), randomnum))
    16       self.data.put(randomnum) #将数据依次存入队列
    17       time.sleep(1)
    18     print ("%s: %s finished!" %(time.ctime(), self.getName()))
    19 
    20 #Consumer thread
    21 class Consumer_even(threading.Thread):
    22   def __init__(self,t_name,queue):
    23     threading.Thread.__init__(self,name=t_name)
    24     self.data=queue
    25   def run(self):
    26     while 1:
    27       try:
    28         val_even = self.data.get(1,5) #get(self, block=True, timeout=None) ,1就是阻塞等待,5是超时5秒
    29         if val_even%2==0:
    30           print ("%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(),self.getName(),val_even))
    31           time.sleep(2)
    32         else:
    33           self.data.put(val_even)
    34           time.sleep(2)
    35       except:   #等待输入,超过5秒 就报异常
    36         print ("%s: %s finished!" %(time.ctime(),self.getName()))
    37         break
    38 class Consumer_odd(threading.Thread):
    39   def __init__(self,t_name,queue):
    40     threading.Thread.__init__(self, name=t_name)
    41     self.data=queue
    42   def run(self):
    43     while 1:
    44       try:
    45         val_odd = self.data.get(1,5)
    46         if val_odd%2!=0:
    47           print ("%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(), self.getName(), val_odd))
    48           time.sleep(2)
    49         else:
    50           self.data.put(val_odd)
    51           time.sleep(2)
    52       except:
    53         print ("%s: %s finished!" % (time.ctime(), self.getName()))
    54         break
    55 #Main thread
    56 def main():
    57   queue = Queue()
    58   producer = Producer('Pro.', queue)
    59   consumer_even = Consumer_even('Con_even.', queue)
    60   consumer_odd = Consumer_odd('Con_odd.',queue)
    61   producer.start()
    62   consumer_even.start()
    63   consumer_odd.start()
    64   producer.join()
    65   consumer_even.join()
    66   consumer_odd.join()
    67   print ('All threads terminate!')
    68 
    69 if __name__ == '__main__':
    70   main()
    View Code
     1 import threading,queue
     2 from time import sleep
     3 from random import randint
     4 class Production(threading.Thread):
     5     def run(self):
     6         while True:
     7             r=randint(0,100)
     8             q.put(r)
     9             print("生产出来%s号包子"%r)
    10             sleep(1)
    11 class Proces(threading.Thread):
    12     def run(self):
    13         while True:
    14             re=q.get()
    15             print("吃掉%s号包子"%re)
    16 if __name__=="__main__":
    17     q=queue.Queue(10)
    18     threads=[Production(),Production(),Production(),Proces()]
    19     for t in threads:
    20         t.start()
    View Code
     1 import threading,time
     2 
     3 li=[1,2,3,4,5]
     4 
     5 def pri():
     6     while li:
     7         a=li[-1]
     8         print(a)
     9         time.sleep(1)
    10         try:
    11             li.remove(a)
    12         except:
    13             print('----',a)
    14 
    15 t1=threading.Thread(target=pri,args=())
    16 t1.start()
    17 t2=threading.Thread(target=pri,args=())
    18 t2.start()
    View Code
  • 相关阅读:
    铺地毯
    解方程
    引水入城
    10.16今日暂时停更博客
    聪明的质监员
    CCF NOI plus 201(7)6 初赛题 解题报告
    初赛可能会用到的计算机基础理论知识整理
    火柴排队
    借教室
    10.10今日暂时停更博客
  • 原文地址:https://www.cnblogs.com/ZhangPengPeng/p/12801955.html
Copyright © 2011-2022 走看看