def METHOD_NAME():
    """pipe_reader"""
    conns = []
    for reader in readers:
        parent_conn, child_conn = multiprocessing.Pipe()
        conns.append(parent_conn)
        p = multiprocessing.Process(
            target=_read_into_pipe, args=(reader, child_conn))
        p.start()
    reader_num = len(readers)
    finish_num = 0
    conn_to_remove = []
    finish_flag = np.zeros(len(conns), dtype="int32")
    while finish_num < reader_num:
        for conn_id, conn in enumerate(conns):
            if finish_flag[conn_id] > 0:
                continue
            buff = conn.recv()
            now = time.time()
            sample = deserialize_data(buff)
            out = time.time() - now
            if sample is None:
                finish_num += 1
                conn.close()
                finish_flag[conn_id] = 1
            else:
                yield sample