Python-生产者与消费者:两个线程之间的通信

生产者与消费者:两个线程之间的通信

Python的queue提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后进先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原理(可以理解为原子操作,即要么不做,要么就做完),能够在多线程中直接使用。

可以用队列来实现线程间的同步。

在这里插入图片描述


代码实现


import threading
import queue
import random
import time

def produce(q):
    i = 0
    while i < 10:
        num = random.randint(1,100)
        q.put('生产者生产数据:%d' % num)
        print('生产者生产数据:%d' % num)
        time.sleep(1)
        i += 1
    q.put(None)
    # 完成任务
    q.task_done()

def consume(q):
    while True:
        item = q.get()
        if item is None:
            break
        print('消费者获取到:%s' % item)
        time.sleep(1)

    # 完成任务
    q.task_done()

if __name__ == '__main__':
    q = queue.Queue(10)
    arr = []

    # 创建生产者
    th = threading.Thread(target=produce,args=(q,))
    th.start()

    # 创建消费者
    tc = threading.Thread(target=consume,args=(q,))
    tc.start()

    th.join()
    tc.join()

输出:

生产者生产数据:65
消费者获取到:生产者生产数据:65
生产者生产数据:52
消费者获取到:生产者生产数据:52
生产者生产数据:19
消费者获取到:生产者生产数据:19
生产者生产数据:42
消费者获取到:生产者生产数据:42
生产者生产数据:9
消费者获取到:生产者生产数据:9
生产者生产数据:10
消费者获取到:生产者生产数据:10
生产者生产数据:45
消费者获取到:生产者生产数据:45
生产者生产数据:90
消费者获取到:生产者生产数据:90
生产者生产数据:25
消费者获取到:生产者生产数据:25
生产者生产数据:9
消费者获取到:生产者生产数据:9
发布了50 篇原创文章 · 获赞 4 · 访问量 1349

猜你喜欢

转载自blog.csdn.net/weixin_43999327/article/details/104022829
今日推荐