python 生成器的数据发送以及多端接收

def save2csv(field_name, filename=None):
    print(field_name, filename)
    while True:
        recv_data = yield 100
        if recv_data == '\q':
            break
        print(recv_data)


def save2mongo(dbname, colname):
    while True:
        recv_data = yield
        if recv_data == '\q':
            break
        print(recv_data)


def get_data_from_generator(generator):
    csv_gen = save2csv('field-name')
    csv_gen.send(None)  # 启动生成器
    mongo_gen = save2mongo('dbname', 'colname')
    mongo_gen.send(None)
    gen_list = [csv_gen, mongo_gen]
    while True:
        try:
            # 接收数据
            data = next(generator)
            print('recv data:', data)
            # 发送数据
            for gen in gen_list:
                gen.send(1234)
        except StopIteration as si:
            print('generator was stop.', si)
            # 关闭生成器
            for gen in gen_list:
                gen.close()
            break


def generator_func():
    for i in range(30):
        yield i


if __name__ == "__main__":
    # 前期测试
    # gen_csv = save2csv('field-name')
    # print(gen_csv.send(None))
    # for i in range(10):
    #     gen_csv.send(i)
    # gen_csv.send('\q')
    generator = generator_func()
    get_data_from_generator(generator)

猜你喜欢

转载自www.cnblogs.com/trent-fzq/p/11478664.html
今日推荐