美文网首页
Python生成器实现生产者消费者模式

Python生成器实现生产者消费者模式

作者: AI拆书人汤问 | 来源:发表于2019-04-09 09:42 被阅读0次
  • 简单示例
import time
def consumer():
    t = ''
    while True:
        result = yield t
        print("消费{}".format(result))
        time.sleep(5)
        print("休息5秒....")

def product():
    c1 = consumer()
    c2 = consumer()
    c1.send(None)
    c2.send(None)
    for i in range(10):
        print("生产{}".format(i))
        c1.send(i)
        c2.send(i)
    c1.close()
    c2.close()

product()
  • python生成器原理:

    函数的调用满足“后进先出”的原则,最后被调用的函数应该第一个返回,函数的递归调用就是一个经典的例子。内存中以“后进先出”方式处理数据的栈段是最适合用于实现函数调用的载体,一般在编译型程序语言中,函数被调用后,函数的参数return地址寄存器值等数据会被压入栈,待函数体执行完毕,将上述数据弹出栈。这意味着一个被调用的函数一旦执行完毕,它的生命周期就结束了。

    Python 解释器运行的时候,会用 C语言当中的PyEval_EvalFramEx 函数创建一个栈帧,所有的栈帧都是分配在堆内存上,如果不主动释放,就会一直在里面。
    Python 的堆栈帧是分配在堆内存中的。)Python 解释器是个普通的 C 程序,所以它的堆栈帧就是普通的堆栈。但是它操作的 Python 堆栈帧是在堆上的,这意味着 Python 的堆栈帧可以在它的调用之外存活,也就是说在函数调用结束后,他的堆栈帧仍然可以存在),这个就是生成器的核心原理实现。

相关文章

网友评论

      本文标题:Python生成器实现生产者消费者模式

      本文链接:https://www.haomeiwen.com/subject/bfmviqtx.html