为什么我得到TypeError列表索引必须是整数或切片,而不是str,而传递参数到多处理池?



我试图从多个文件夹实现图像处理的多处理,当我使用多处理库时,我试图将多个参数传递给池函数,但我得到类型错误,我的代码如下

def augment(args):
imgs = args[0]
bpath = args[1]
dictcount = args[2]
for img in imgs:
cv2.imread(img)
def main():
basepath = 'some path'
count_dict = {some dict}
allImagepaths = sorted(list(paths.list_images(basepath))
procs = no_cores if no_cores > 0 else cpu_count()
procids = list(range(0,procs))
noImgsproc = len(allImagepaths) /float(procs)
noImgsproc = int(np.ceil(noImgsproc))
chunkpaths = list(chunk(allImagepaths,noImgsproc))
payloads = [ ]
for (i,imgpaths) in enumberate(chunkpaths):
data = {"id":i,"input_paths":imgpaths}
payloads.append(data)
pool = Pool(processes = procs)
pool.map(augment,[[payloads,basepath,count_dict]])

当我运行这个时,我得到如下错误

文件"aug_imgs。主要是Pylin 306pool.map(增加,[[有效载荷,basepath, count_dict]])

文件用户"C: rob anaconda3 env retinanet lib 多处理 pool.py",第364行,在map return中自我。_map_async(func, iterable, mapstar, chunksize).get()
文件用户"C: rob anaconda3 env retinanet lib 多处理 pool.py",第771行,在get raise self。_value
TypeError:列表索引必须是整数或切片,不能是str

但如果我只传递一个函数参数代码运行完美没有错误我传递的是imgs = args在augment()中如下

pool.map(增加有效载荷)

我做错了什么,任何帮助解决这个问题将不胜感激,提前感谢

将处理函数分解为处理单个图像,然后将图像集合传递给处理池。您可以使用functools.partial:

设置其他常量参数。
from functools import partial
def augment(base_path, count_dict, image):
# do something with base_path & count_dict
cv2.imread(image)
def main():
# assuming base_path and count_dict are defined here
partial_augment = partial(augment, base_path, count_dict)
pool = Pool()
pool.map(partial_augment, images)