线程间通信 | 手把手教你入门Python之一百零三-阿里云开发者社区

开发者社区> Python学习站> 正文

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

简介: 线程之间有时需要通信,操作系统提供了很多机制来实现进程间的通信,其中我们使用最多的是队列Queue。

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

线程间通信

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

Queue的原理

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

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()

配套视频

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
Python学习站
使用钉钉扫一扫加入圈子
+ 订阅

Python学习资料大全,包含Python编程学习、实战案例分享、开发者必知词条等内容。

官方博客
官网链接