为什么在将参数传递给多处理池时出现 TypeError list indices must be integers or slices 而不是 str?

Why am I getting TypeError list indices must be integers or slices , not str while passing arguments to multiprocessing pool?

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

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]])

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

File "aug_imgs.pylin 306, in main pool.map(augment,[[payloads,basepath,count_dict]])

File "C:\Users\rob\anaconda3\envs\retinanet\lib\multiprocessing\pool.py", line 364, in map return self._map_async(func, iterable, mapstar, chunksize).get()
File "C:\Users\rob\anaconda3\envs\retinanet\lib\multiprocessing\pool.py", line 771, in get raise self._value
TypeError: list indices must be integers or slices, not str

但是如果我只传递一个函数代码 运行s 的参数完全没有错误,那么我将作为 imgs = args in 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)