zoukankan      html  css  js  c++  java
  • 小白的Python之路 day4 生成器并行运算

    一.概述

      我们已经明白生成器内部的结构,其实就是通过像函数这样的东西实现的!

      多线程和单线程:简单来说多线程就是并行运算,单线程就是串行运算

    二.生成器执行原理

    第一步:生成一个生成器

     第二步:执行第一个next方法,开始调用函数,执行到yield时中断,把返回值返回给变量(moon_cake):

     

    下面有next有几次执行几次这样的返回,但是返回的值是none

     从上面可以看出send()和__next__()方法的区别:

      1.__next__()只是调用这个yield,也可以说成是唤醒yield,但是不不会给yield传值。

      2.send()调用这个yield或者说唤醒yield同时,也活给yield传一个值。

      3.使用send()函数之前必须使用__next__(),因为先要中断,当第二次调用时,才可传值。

    为什么给吃月饼的人传值时,必须先执行__next__()方法?

    如果不执行一个__next__()方法,只是把函数变成一个生成器,你只有__next__()一下,才能走到第一个yield,然后就返回了,调用下一个send()传值时,才会发月饼.

    上面 noon_cakes()开始执行时,

    单线程通过生成器可以进行并行效果,原理(实际上还是串行的,但是因为我在不同的角色之间进行切换,并且因为运行速度特别快,你感觉上是并行的)

    这实际上是异步IO的雏形,单线程向的并行效果,称之为协程(协程比线程更小的一个单位,他寄生在线程里)

    以后还会具体讲协程,这里只是提一下,协程还是很牛x的.

     

  • 相关阅读:
    Android批量插入数据库提升速度(9.9)
    Android中database所在文件夹路径(9.6)
    Eclipse更改默认工作环境编码为UTF-8(9.6)
    Android下Sqlite的使用(9.7)
    Android下ListView的分页(9.6)
    【转】Tarjan算法 资料合集
    【转】BYV--有向图强连通分量的Tarjan算法
    Codeforces Round #403---C题(DFS,树)
    codeforces#403—B题(二分,三分)
    【转】毛虫算法——尺取法
  • 原文地址:https://www.cnblogs.com/ManyQian/p/8159193.html
Copyright © 2011-2022 走看看