WEB开发网
开发学院服务器负载均衡 分布式单词发音抓取机器人 阅读

分布式单词发音抓取机器人

 2012-05-24 09:22:06 来源:WEB开发网   
核心提示:文件回传线程的执行逻辑对应的流程图如图8所示:图8 文件回传线程单词列表类class WordsList: def __init__(self): if(len(sys.argv)<2): print 'Usage: %s filename' %
文件回传线程的执行逻辑对应的流程图如图8所示:

李超

图8 文件回传线程
单词列表类

class WordsList: 
 
    def __init__(self): 
        if(len(sys.argv)<2): 
            print 'Usage: %s filename' % sys.argv[0] 
            sys.exit(-1)     
        filePath = sys.argv[1] 
        self.t = [] 
        try: 
            for line in fileinput.input(filePath): 
                wordLen = len(line) 
                if( wordLen > 1  and  line[wordLen-1] == '\n'): 
                    word = line[0:wordLen-1] 
                    self.t.append(word) 
                else: 
                    self.t.append(line) 
            self.t.append('0') 
        except: 
            print 'constructing words list error.' 
            print 'maybe the provided file path is wrong.Check it twice.' 
            sys.exit(-2) 
        finally: 
            pass 
        print 'constructing words successfully...' 
             
    def front(self): 
        if(self.t[0]!='0'): 
            return self.t.pop(0) 
        else: 
            return self.t[0] 

说明:该类在构造函数中,从命令行上提供的文件名中解析出所有的单词,并存放在一个列表中,在最后加入一个’0’表示已经没有单词了。此类中还提供一个方法--front,用于从单词队列中获取队首的单词,如果没有单词的话,返回为’0’。这一点非常重要,用于控制从节点线程的结束。
总结
今年一月份的时候,准备背诵德语四级单词,但是很多单词发音记不清楚,所以找到了一个单词发音网站。当时,想将这些音频文件存放在我的mp3播放器中,这样我可以随时随地的背诵记忆了,所以用Python写了一个简单的单词发音抓取程序,但是抓取效率不是很高,速度比较慢。而我的研究方向为高性能计算,现在主要是集群计算,所以结合网络课程上要求的套接字网络编程实验和我的研究方向,完成了此软件的开发。
该软件的目标很明确,就是以服务器能否提供的最大负载来下载单词对应的音频文件。此软件有一定的攻击性,如果这个软件可以通过因特网传播,并在后台隐秘的运行,则完全可以使提供单词下载的网站瘫痪。
在实际编程中,遇到了一些比较棘手的问题。特别是文件传输过程,虽然可以使用ftp协议传输,但是为了保持软件的最小依赖性,还是实现了一个简单的文件传输协议。因为Karn算法的原因,有些字节被缓冲在缓存中导致接受过程混乱等问题都是之前没有遇到过的。这些问题通过自定义的一些简单的协议得以解决。
之前还想添加一个语音提示的功能,在某个单词下载完毕之后,语音提示该单词已经下载完成。但考虑到多节点下载时单词发音反而会成为瓶颈,所以放弃了这个功能的实现。
此软件仅仅作为一个演示软件,并没有在实际的集群上运行过。软件的实际运行环境还是做了很多的假设,并不能保证深度测试的时候不出现故障。
关于软件的并发,由于希望此软件能够运行在集群上,所以就必须考虑负载均衡的问题。这里使用主从模式,服务器作为主节点,其他节点作为从节点。为了做到负载均衡,使用动态任务分配的并行模式,每个从节点在没有任务的时候向主节点索取,而不是被动的从主节点接受。动态任务分配的模式可以保证各个节点都处于繁忙状态,最小化负载不均带来的问题。

上一页  1 2 3 4 5 

Tags:分布式 单词 发音

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接