最近遇到多次paddle.fluid.io.xmap_readers函数,之前一直一知半解,官方的文档如下:
paddle.fluid.io.xmap_readers(mapper, reader, process_num, buffer_size, order=False)
添加链接描述
多线程下,使用自定义映射器 reader 返回样本到输出队列。
参数:
mapper (callable): 映射 reader 数据的函数。
reader (callable): 产生数据的 reader。
process_num (int): 处理样本的线程数。
buffer_size (int): 数据缓冲队列大小。
order (bool): 是否保持原始 reader 数据顺序,默认为 False。
返回:一个用户定义的 reader 装饰器 。
返回类型:callable,可调用对象。
代码示例:
import paddle.fluid as fluid
import time
def reader_creator_10(dur):
def reader():
for i in range(10):
time.sleep(dur)
yield i
return reader
def mapper(x):
return (x + 1)
orders = (True, False)
thread_num = (1, 2, 4, 8, 16)
buffer_size = (1, 2, 4, 8, 16)
for order in orders:
for t_num in thread_num:
for size in buffer_size:
user_reader = fluid.io.xmap_readers(mapper,
reader_creator_10(0),
t_num, size, order)
for n in range(3):
result = list()
for i in user_reader():
result.append(i)
if not order:
result.sort()
for idx, e in enumerate(result):
assert e == mapper(idx)
下面说一下自己的理解:首先返回的是一个reader 装饰器,先不管什么是装饰器,我们只需知道如何使用这个函数。首先如果直接打印这个函数的输出,你将会得到一个下面的结果:
要获得该函数的结果,可以直接把这个函数当做类似于列表的存在用for 循环来处理。这只是我的理解,有不对的地方请指正。