消息队列的实现:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXuVzVa9mTY1UdGdVZwhmMjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jN1EjNwMzMyIDOxITM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
#@File :queue_1.py
from threading import Thread
import time
from multiprocessing import Queue
class Proceduer(Thread):
def __init__(self, queue):
super(Proceduer, self).__init__()
self.queue = queue
def run(self):
try:
for i in xrange(1, 10):
print("put data is {0} to queue".format(i))
self.queue.put(i)
except Exception as e:
print("put data error!")
raise e
class Consumer_odd(Thread):
def __init__(self, queue):
super(Consumer_odd, self).__init__()
self.queue = queue
def run(self):
try:
while not self.queue.empty:
number = self.queue.get(block=True, timeout=3)
if number%2 != 0:
print("get {0} from queue ODD".format(number))
else:
self.queue.put(number)
time.sleep(1)
print("####################### ODD time #####################")
except Exception as e:
raise e
class Consumer_even(Thread):
def __init__(self, queue):
super(Consumer_even, self).__init__()
self.queue = queue
def run(self):
try:
while not self.queue.empty:
number = self.queue.get(block=True, timeout=3)
if number%2 == 0:
print("get {0} from queue even, thread name is: {1}".format(number, self.getName()))
else:
self.queue.put(number)
time.sleep(1)
print("################# even time ##########################")
except Exception as e:
raise e
def main():
queue = Queue()
p = Proceduer(queue=queue)
p.start()
p.join()
time.sleep(1)
c1 = Consumer_odd(queue=queue)
c2 = Consumer_even(queue=queue)
c1.start()
c2.start()
p.join()
c2.join()
print("All threads terminate!")
if __name__ == '__main__':
main()
put data is 1 to queue
put data is 2 to queue
put data is 3 to queue
put data is 4 to queue
put data is 5 to queue
put data is 6 to queue
put data is 7 to queue
put data is 8 to queue
put data is 9 to queue
All threads terminate!
与预期结果不符: