python使用append函数无法添加列表元素
定义了全局变量X,Y。希望可以利用多进程快速的把我想要的信息append进同一个列表。列表在最后print出来之前都是有数据的,但是print出来的却是空列表。
python">from PIL import Image,ImageDraw,ImageFontimport 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的图片信息。
求大神指导下怎么改正。原来的虽然可以正常用,但是图片数量多的话,处理速度实在太慢,所以希望可以多进程加快处理速度。谢谢
回答:
不同进程中的x,y不是同一个啊,结尾的print(x,y)打印出来的是主进程中的x,y,这个是空的,有数字的是multiprocessing启动的新进程里的x,y
以上是 python使用append函数无法添加列表元素 的全部内容, 来源链接: utcz.com/p/937653.html