第一次用函数计算处理图片,我踩过的几个地方
我第一次把图片处理交给函数计算的时候,脑子里想的其实很简单,图片传上去,函数跑一下,处理好的图片再出来,好像中间不会有什么岔子。真正动手之后才发现,事情不是这样,几个看着很小的地方,错一个就能让整个流程跑不起来,或者跑起来了却没有结果,而我当时花了不少时间,才慢慢把它们一个一个对上。
源桶和目标桶不能是同一个,这一点我一开始没有太在意。我当时想,放在同一个桶里不是更省事吗,少建一个桶,也少填一个名字。结果函数一被触发,它处理完又写回同一个桶,新的文件又可能再次触发函数,这样来来回回,很容易把自己绕进去。后来我把两个桶分开,源桶只负责收原图,目标桶只负责收处理后的图,流程一下子就清楚了,出了问题也知道该去哪一个桶里找。
触发器要建在源桶上,这个地方我也弄错过。我一开始在目标桶那边看了半天,总觉得触发器应该跟着结果走。可是函数要等的是原图的到来,不是处理完的图片,所以触发器只能放在源桶上。换句话说,源桶里有了新图片,函数才会被叫起来,目标桶只是安静地等着收结果。如果触发器放错了地方,图片传上去也没有人管,函数根本不会动,我当时就是这样空等了很久。
环境变量填完之后,一定要回头确认它真的保存生效了。我有一次填得很认真,名字和值都对了,可是我没有多看一眼就直接去测试,结果函数读到的还是旧的值,或者干脆读不到。后来我养成了一个习惯,填完先保存,再重新打开看一遍,确认输出桶的名字和地址都没有走样,才去传图测试。这个多看一眼的动作很小,可是它省掉的麻烦却不小。
另外还有一个容易被忽略的地方,就是单张图片失败的时候,别让整个流程都停下来。图片有很多种,有的格式不对,有的本身就损坏了,如果函数一遇到这种图片就直接报错退出,那后面排队的图片也会跟着受影响。我后来在处理的时候,会把单张的失败单独记下来,跳过它,继续处理下一张,等整批跑完了再回头看那几张有问题的图。这样做虽然多了一点记录的工作,可是整体的流程不会因为一张图就卡住,排查起来也更有头绪。
我现在做类似的东西,还是会先把这几个地方在心里过一遍,虽然慢一点,可是比事后到处找原因要划算,至少心里踏实一些。
- 点赞
- 收藏
- 关注作者
评论(0)