且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

线程间通信 | 手把手教你入门Python之一百零三

更新时间:2021-12-30 19:56:55

上一篇:多线程版聊天 | 手把手教你入门Python之一百
下一篇:多进程的使用 | 手把手教你入门Python之一百零四
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

线程间通信

线程之间有时需要通信,操作系统提供了很多机制来实现进程间的通信,其中我们使用最多的是队列Queue。经典案例:生产者和消费者。

Queue的原理

Queue是一个先进先出(First In First Out)的队列,主进程中创建一个Queue对象,并作为参数传入子进程,两者之间通过put( )放入数据,通过get( )取出数据,执行了get( )函数之后队列中的数据会被同时删除,可以使用multiprocessing模块的Queue实现多进程之间的数据传递。
线程间通信 | 手把手教你入门Python之一百零三

import threading, queue
import time


def produce():
    for i in range(10):
        time.sleep(0.5)
        print('生产++++++面包{} {}'.format(threading.current_thread().name, i))
        q.put('{}{}'.format(threading.current_thread().name, i))


def consumer():
    while True:
        time.sleep(1)
        # q.get()方法时一个阻塞的方法
        print('{}买到------面包{}'.format(threading.current_thread().name, q.get()))


q = queue.Queue()  # 创建一个q

# 一条生产线
pa = threading.Thread(target=produce, name='pa')
pb = threading.Thread(target=produce, name='pb')
pc = threading.Thread(target=produce, name='pc')

# 一条消费线
ca = threading.Thread(target=consumer, name='ca')
cb = threading.Thread(target=consumer, name='cb')
cc = threading.Thread(target=consumer, name='cc')

pa.start()
pb.start()
pc.start()

ca.start()
cb.start()
cc.start()

配套视频