Python协程实现生产者消费者模型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python协程实现生产者消费者模型相关的知识,希望对你有一定的参考价值。

  协程的实现为协作式而非抢占式的,这是和进程线程的最大区别。在Python中,利用yield和send可以很容易实现协程。

  首先复习下生成器。

  如果一个函数使用了yield语句,那么它就是一个生成器函数。当调用这个函数时,它返回一个迭代器。当第一次调用__next__()时候,生成器函数主体开始执行,遇到yield表达式时候终止。

  当使用__next__()方法时候,yield value语句返回None;当使用send(v)方法时候,yield value返回v。也就是说,__next__()方法相当于send(None)方法

 1 def consumer()
 2     while True:
 3         line = yield                            #line接收的是yield这个表达式的返回值!
 4         print(line.upper())
 5 
 6 
 7 def productor():
 8     with open(text.txt) as file:
 9         for i, line in enumerate(file):
10             yield line
11             print("{0} lines".format(i))
12 
13 
14 c = consumer()
15 c.__next__()                                   #手动启动生成器,注意在Python3.X中不是c.next()
16 for i in productor():
17     c.send(i)

参考资料:《改善Python程序的91个建议》建议66、67

以上是关于Python协程实现生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章

Python连载38-协程可迭代迭代器生产者消费者模型

Python学习笔记——进阶篇第九周———线程进程协程篇(队列Queue和生产者消费者模型)

python 生产者消费者问题的Python的协程实现

python基础:协程详解

golang 并发编程之生产者消费者

操作系统OS,Python - 协程(Coroutine)