Asyncio协同程序

时间:2016-07-21 11:20:11

标签: python python-3.x coroutine python-asyncio

我以为我和David Beazley非常友好地签署了协程presentation但是我无法完全理解PEP-492中描述的新语法。

在演讲中,他解释了协同程序如何被认为是一个被推到的管道,而不是从发电机中拉出来。

例如:

MyUtils

如何使用这种新语法实现# 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()) 协同程序?我还没有看到使用这种新语法将协程推送到的示例。有可能吗?

1 个答案:

答案 0 :(得分:1)

你所拥有的不是asyncio模块和/或PEP-492意义上的协同程序。正如PEP本身所说:

  

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

  1. 您的示例中没有涉及调度程序(事件循环)和
  2. 协程没有仅使用yield作为调度程序的信号“;它真的用它来读取数据。