在python中,提供了线程安全的阻塞队列queue。这使得对信号量的需求降低了不少。能很简单的实现生产消费者模式。
下面是一个例子,实现两个阻塞队列,并且对它们同时进行监听取数据。
import queue
from multiprocessing.dummy import Pool as ThreadPool
import time
q1 = queue.Queue(maxsize=0)
q2 = queue.Queue(maxsize=0)
combine = queue.Queue(maxsize=0)
def monitor(q):
while True:
combine.put((q,q.get()))
def test_insert():
for i in range(10):
q1.put(i)
time.sleep(0.1)
q2.put(i)
p = ThreadPool(4)
p.apply_async(monitor, (q1,))
p.apply_async(monitor, (q2,))
p.apply_async(test_insert)
while True:
temp_q, temp_data = combine.get()
print(temp_q, temp_data)