如何解决如何简化python协程?
我真的很想使用python协程来简化我的数据使用者,但是我发现标准实现不是很好:
def printer():
print('setup')
try:
while True:
data = yield
print(data)
except GeneratorExit:
pass
print('cleanup')
是否可以使用for循环编写使用者?
def printer():
print('setup')
for data in yield_iterator():
print(data)
print('cleanup')
我尝试了几种其他方法来封装yield
和GeneratorExit
的处理,但是,一旦我将yield
移到子功能printer()
中,我就没有了不再是协程。
您知道用python编写协程的一种优雅方法吗?
解决方法
我终于能够根据plamut的答案建立解决方案: https://stackoverflow.com/a/60118660/11462250
关键是要创建一个等待对象,并在 await
中产生 yieldsclass Awaitable:
def __await__(self):
return (yield)
然后可以这样写:
async def printer(source):
print('setup')
async for data in source:
print(data)
print('cleanup')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。