【问题标题】:String issue for Python multiprocessingPython多处理的字符串问题
【发布时间】:2021-08-19 16:59:01
【问题描述】:

面临字符串解析和多处理库的一些问题。这是我的代码,我还概述了函数调用和错误。

def semi_func(tile):
        with open(tile, 'rb') as f:
           img = Image.open(BytesIO(f.read()))
           resized_im, seg_map = MODEL.run(img)
           vis_segmentation_tiles(str(tile),resized_im, seg_map)
           x = np.unique(seg_map)
           x = x.tolist()
           print("THIS IS X", x)
           ans_tiles[str(tile)] = x
           print(x)
        return ans_tiles
    
def split_tiles_new(image_path, tiledir):
        print("1")
        pool = Pool(processes=5)
        print("2")
        num_tiles = 9
        tiles = image_slicer.slice(image_path, num_tiles, save=False)
        print("3")
        print(tiles)
        image_slicer.save_tiles(tiles, directory=tiledir)
        print(tiles)
        print("TILES ABOEVE")
        
        onlytiles = [os.path.join(tiledir,f) for f in listdir(tiledir) if isfile(join(tiledir, f))]
       
        ans_tiles = {}
        print(onlytiles)
        onlytiles = list(map(str, onlytiles))
        for t in onlytiles:
            print(t)
        for tile in onlytiles:
            print(tile)
            pool.map(semi_func,tile)
        pool.close()
        pool.join()
        print(ans_tiles)
        return ans_tiles

就我的功能而言,这是我所提供的:

ans_tiles = split_tiles_new(local_jpg, tiledir)
local_jpg = 'wheat044146108.jpg'

tiledir = 'tiles044146108'

在tiledir(目录)里面,有一堆平铺的图片:

['tiles044146108/_03_02.png', 'tiles044146108/_03_01.png', 'tiles044146108/_02_02.png', 'tiles044146108/_01_01.png', 'tiles044146108/_03_03.png', 'tiles044146108/_01_02.png', 'tiles044146108/_02_01.png', 'tiles044146108/_02_03.png', 'tiles044146108/_01_03.png']

这就是变量“onlytiles”中的内容。

但我的问题是这个错误:

multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/usr/lib/python3.7/multiprocessing/pool.py", line 121, in worker
    result = (True, func(*args, **kwds))
  File "/usr/lib/python3.7/multiprocessing/pool.py", line 44, in mapstar
    return list(map(*args))
  File "serve_wh.py", line 128, in semi_func
    with open(tile, 'rb') as f:
FileNotFoundError: [Errno 2] No such file or directory: 't'
"""

我不确定它为什么要对字符串进行进一步切片?知道我能做些什么来确保它只是从“onlyfiles”列表中分别抓取每个文件吗?

【问题讨论】:

    标签: python python-3.x string list multiprocessing


    【解决方案1】:

    您的可迭代对象是一个文件名字符串,这就是它尝试打开名称为 t 的文件的原因。检查Pool.map 第二个参数。

    pool.map(semi_func,tile)
    

    你应该使用

    pool.map(semi_func,onlytiles)
    

    没有 for 循环,因此它遍历列表而不是字符串。

    【讨论】:

    • 我试试这个,它总是超时
    • @mike0494 请告诉它卡在哪个部分。您可以通过添加大量打印语句来检查。此更改将解决找不到文件名的问题。但是超时是不同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多