之前在VS上面用Incredibuild进行分布式计算非常的爽,简单配置就可以利用局域网内空闲的CPU,在机房的环境中,半个小时的项目只要几分钟就可编译完成。
刚好最近需要做一个爬虫程序,一台机子太慢,所以想用分布式,利用另外一台机子的算力,找了一些python分布式的资料,都需要配置,心想这么简单的程序就不用牛刀了,便想用局域网内的共享文件夹来实现任务分发和产物收集。
以两台机子为例,一台是主机,负责任务分发和,处理,需要写两个程序,一个任务读取和分发,同时判断目前从机有几个任务没做,如果太多,就不给从机发,自己做;另一个程序负责检查产物文件夹,如果有,就按照顺序进行处理入库。我的爬虫程序是按照日期来的,所以分发程序就按照日期作为文件名,放在待处理文件夹中。
从机就很简单了,只要待处理文件夹有文件,就马上处理,并生成结果到产物文件夹中。共用文件夹放在客机上面,在主机以映射网络驱动器的方式,主机的程序加上盘符访问即可。这样,基于局域网共享文件的高速性能,就可以实现分布式计算了,并且逻辑都在自己的掌控之中,每个步骤和结果都可以控制。
ps:每个机子都用的是多进程,这样所有的CPU都可以跑起来。
最近在看IPV6,心想既然ipv6共享文件夹也好弄,是不是可以利用v6网络实现外网的多机器分布式计算呢。