python使用append函数无法添加列表元素

定义了全局变量X,Y。希望可以利用多进程快速的把我想要的信息append进同一个列表。列表在最后print出来之前都是有数据的,但是print出来的却是空列表。

from PIL import Image,ImageDraw,ImageFont
import os,time,multiprocessing

global x
global y
x,y=[],[]

def sy(path):
    image = Image.open(path)
    layer = image.convert('RGBA')
    x.append(layer.size[0])
    y.append(layer.size[1])
    print(x,y)                     #看看x和y是不是添加元素为空

def find_file(path):
    info=[]
    for i in os.listdir(path):
        this_path = os.path.join(path, i)
        if os.path.isfile(this_path):
            info.append(this_path)
        else:
            pass
    return info

if __name__ == '__main__':
    imgpath=find_file(input('目标文件夹: '))
    pool=multiprocessing.Pool(process=1)     
    #当process=4时,发现运行变快了,但是有很多个图片的信息没append到列表里.如果是1就可以全部append到。
    pool.map(sy,imgpath)
    pool.close()
    pool.join()
    # x.sort()   准备比较大小,取所有图片X,Y最小值
    # y.sort()
    # print(x[0],y[0])
    print(x,y)

运行输出如下:

[717] [709]
[717, 640] [709, 640]
[717, 640, 747] [709, 640, 747]
[717, 640, 747, 672] [709, 640, 747, 672]
[717, 640, 747, 672, 792] [709, 640, 747, 672, 792]
[717, 640, 747, 672, 792, 744] [709, 640, 747, 672, 792, 744]
[717, 640, 747, 672, 792, 744, 738] [709, 640, 747, 672, 792, 744, 738]
[717, 640, 747, 672, 792, 744, 738, 792] [709, 640, 747, 672, 792, 744, 738, 792]
[] []

可以看见最后的列表忽然变成空的了,不知道为什么。另外就是多进程的时候,处理会遗漏很多图片。相比单进程的时候少了很多要append的图片信息。
求大神指导下怎么改正。原来的虽然可以正常用,但是图片数量多的话,处理速度实在太慢,所以希望可以多进程加快处理速度。谢谢

阅读 5k
1 个回答

不同进程中的x,y不是同一个啊,结尾的print(x,y)打印出来的是主进程中的x,y,这个是空的,有数字的是multiprocessing启动的新进程里的x,y

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题