Bir eşyordamın için stdin'den bir veri geçirerek basit bir fikri uygulamaya çalışıyorum: Bu kod, bir değişkenle İşin inceliği, ancak basitleştirilmiş bir sürümünü çalışırPython asyncio: okuyucu geri arama ve eşyordam iletişimin
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()
yerine Event
nesnenin çok çalışır:
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
Benim sorulara
şunlardır:Event
ile yaklaşım doğru mu? Ya da bu tür bir sorunu çözmek için başka bir asyncio nesnesiyle daha iyi bir yol var mı?
Event
ile yaklaşım gayet eğer Sonra, bir değişken kullanılarak de gayet iyi olduğunu?
Teşekkür ederiz.
Çok teşekkürler @dano, 'queue' yaklaşımı' 'olay '' birinden gerçekten daha iyi görünüyor. –