故事:
事情是这样的。突然接到一个任务,要求把HDFS上的数据copy一倍,用于压力测试。我仔细检查了HDFS的数据,发现每个数据目录下的文件数量在1000个左右。要求把每个文件copy一遍,重命名,放在相同的目录下。于是,我就写了个perl脚本,依次对每个文件夹下的每个文件复制一次。
悲剧就这样发生了。脚本跑了两天,才完成了大概1/3的任务(被人喷了)。这个时候,我才意识到串行的任务操作是不可取的,一个直接的想法是使用多进程来同时启动多个任务(别问我问什么没有想到多线程)。于是就有了今天的话题。
正文:
脚本如下。很简单,只有三个函数,一个设置进程池的大小,一个负责任务的进程调度,一个负责等待所有任务执行结束。具体使用方法:首先把任务代码封装成一个函数;然后把任务函数地址和函数参数传递给调度函数,调度函数就会依照设置,调度多进程完成任务;最后调用等待函数等待所有的进程完成任务。