Asyncio协程

我认为我已经用David Beazley的非常好的演示文稿构建了协程,但我无法用PEP-492中描述的新语法完全调和它。

在演讲中,他解释了协程可以被看作是一个被推到的管道,而不是像发电机那样被拉出。

例如:

# cofollow.py
#
# A simple example showing how to hook up a pipeline with
# coroutines.   To run this, you will need a log file.
# Run the program logsim.py in the background to get a data
# source.

from coroutine import coroutine

# A data source.  This is not a coroutine, but it sends
# data into one (target)

import time
def follow(thefile, target):
    thefile.seek(0,2)      # Go to the end of the file
    while True:
         line = thefile.readline()
         if not line:
             time.sleep(0.1)    # Sleep briefly
             continue
         target.send(line)

# A sink.  A coroutine that receives data

@coroutine
def printer():
    while True:
         line = (yield)
         print line,

# Example use
if __name__ == '__main__':
    f = open("access-log")
    follow(f,printer())

如何使用这种新语法实现printer()协同程序? 我还没有看到一个协程被推到使用这个新语法的例子。 可能吗?


asyncio模块和/或PEP-492的角度来看,你在那里没有一个协同程序。 正如PEP本身所说:

[此PEP]仅与使用yield作为调度程序信号的协程类型有关,表明协程将等待事件(如IO)完成。

  • 您的示例中没有涉及调度程序(事件循环),并且
  • 协程并不仅仅使用yield “作为调度器的信号”; 它真的用它来读取数据。
  • 链接地址: http://www.djcxy.com/p/53209.html

    上一篇: Asyncio coroutines

    下一篇: How to not await in a loop with asyncio?