Tôi cố gắng để thực hiện một ý tưởng đơn giản đi qua một dữ liệu từ thiết bị nhập chuẩn cho một coroutine:Python asyncio: đọc gọi lại và giao tiếp coroutine
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()
Mã này hoạt động tốt, tuy nhiên một phiên bản đơn giản của nó với một biến thay vì một đối tượng Event
làm việc quá:
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
câu hỏi của tôi là: là cách tiếp cận với Event
có đúng không? Hoặc là có một cách tốt hơn với một đối tượng asyncio để xử lý loại vấn đề? Sau đó, nếu cách tiếp cận với Event
là tốt, việc sử dụng biến cũng có tốt không?
Cảm ơn bạn.
Cảm ơn bạn rất nhiều @ dano, 'xếp hàng' phương pháp tiếp cận trông thực sự tốt hơn so với' 'sự kiện' 'một. –