我以为我和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())
协同程序?我还没有看到使用这种新语法将协程推送到的示例。有可能吗?
答案 0 :(得分:1)
你所拥有的不是asyncio
模块和/或PEP-492意义上的协同程序。正如PEP本身所说:
[此PEP]仅与使用
yield
作为调度程序信号的协程类型相关,表示协程将等待直到事件(例如IO)完成。
yield
作为调度程序的信号“;它真的用它来读取数据。