Rumah  >  Soal Jawab  >  teks badan

异步编程 - Python中的yield from的用法?

对于yield from目前我只知道这一种用法,我对它的理解也停留在yield from generator

In [1]: def reader():
   ...:     """A generator that fakes a read from a file, socket, etc."""
   ...:     for i in range(4):
   ...:         yield '<< %s' % i
   ...:         

In [2]: def reader_wrapper(g):
   ...:     yield from g
   ...:     

In [3]: wrap = reader_wrapper(reader())

In [4]: for i in wrap:
   ...:     print(i)
   ...:     
<< 0
<< 1
<< 2
<< 3

但是在廖雪峰的异步IO教程中看见一个yield from的新用法,请问下面这个yield from asyncio.sleep(1)是什么意思,asyncio.sleep(1)也是一个生成器吗?看官方文档也没有给出明确的解释,也是直接贴的代码,拜托大神解释一下!

import asyncio

@asyncio.coroutine
def hello():
    print("Hello world!")
    # 异步调用asyncio.sleep(1):
    r = yield from asyncio.sleep(1)
    print("Hello again!")

# 获取EventLoop:
loop = asyncio.get_event_loop()
# 执行coroutine
loop.run_until_complete(hello())
loop.close()
迷茫迷茫2711 hari yang lalu434

membalas semua(4)saya akan balas

  • 怪我咯

    怪我咯2017-04-18 10:06:59

    Mula-mula cari definisi fungsi asyncio.sleep()

    coroutine asyncio.sleep(delay, result=None, *, loop=None)
    

    Maksudnya, fungsi ini adalah fungsi coroutine Fungsi coroutine boleh dipanggil seperti ini untuk mendapatkan nilai pulangan

    result = await coroutine or result = yield from coroutine 

    Mengapa ia boleh digunakan dengan cara ini?

    1. menunggu itu sendiri adalah kata kunci yang digunakan dalam coroutines

    2. boleh menggunakan kata kunci hasil kerana pelaksanaan coroutine adalah berasaskan penjana Adapun mengapa menggunakan hasil daripadaSebaliknya < yang asal . /www.python.org/dev/pe...

      Ringkaskan seperti berikut: Anda boleh menggunakan
    3. hasil
    kerana

    coroutine berasaskan penjana, jadi tidak salah untuk mengatakan bahawa sleep mengembalikan generator sebab mengapa dari muncul kerana terlalu menyusahkan untuk hanya menggunakan hasil Anda boleh menganggapnya sebagai gula sintaks untuk mendapatkan butiran, sila lihat PEP8. PS: Hanya beberapa perkataan di penghujung Inilah sebabnya saya tidak mengesyorkan membaca blog untuk mempelajari bahasa. Mengapa tidak memilih dokumentasi Python yang lebih berwibawa dan terperinci?

    balas
    0
  • PHPz

    PHPz2017-04-18 10:06:59

    Intipati coroutine ialah penjana

    Anda boleh menonton video ini~
    Terokai pelaksanaan ciri async/menunggu dalam Python 3.5

    balas
    0
  • PHPz

    PHPz2017-04-18 10:06:59

    Kenapa anda perlu bungkus sekali?

    for i in reader():
        print(i)
    

    Bolehkah ini juga digunakan? Sangat hairan. . .

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:06:59

    Anda boleh membaca artikel ini yang ditulis oleh pengarang Python, terjemahan kasar

    balas
    0
  • Batalbalas