【发布时间】:2015-06-11 01:42:24
【问题描述】:
我正在尝试实现一个将数据从标准输入传递到协程的简单想法:
import asyncio
import sys
event = asyncio.Event()
def handle_stdin():
data = sys.stdin.readline()
event.data = data # NOTE: data assigned to the event object
event.set()
@asyncio.coroutine
def tick():
while 1:
print('Tick')
yield from asyncio.sleep(1)
if event.is_set():
data = event.data # NOTE: data read from the event object
print('Data received: {}'.format(data))
event.clear()
def main():
loop = asyncio.get_event_loop()
loop.add_reader(sys.stdin, handle_stdin)
loop.run_until_complete(tick())
if __name__ == '__main__':
main()
这段代码可以正常工作,但是它的简化版本使用变量而不是Event 对象也可以:
data = None
def handle_stdin():
global data
data = sys.stdin.readline()
@asyncio.coroutine
def tick():
while 1:
print('Tick')
yield from asyncio.sleep(1)
global data
if data is not None:
print('Data received: {}'.format(data))
data = None
我的问题是:Event 的方法是否正确?或者有没有更好的方法与另一个 asyncio 对象来处理这种问题?
那么,如果Event 的方法很好,那么使用变量也可以吗?
谢谢。
【问题讨论】:
标签: python python-3.x python-3.4 coroutine python-asyncio