Как мультиплексировать несколько блокирующих генераторов Python в one?

Рассмотрим следующий псевдокод:

def g_user():
    while True:
        yield read_user_input()

def g_socket():
    while True:
        yield read_socket_input()

def g_combined(gu, gs):
    # should read user or socket input, whichever is available

    while True:
        sel = select(gu, gs)
        if sel.contains(gu):
            yield gu.next()
        if sel.contains(gs):
            yield gs.next()

gc = g_combined ( g_user(), g_socket() )

Как реализовать это проще всего?

7
задан Vi. 8 February 2012 в 01:56
поделиться