分布式单词发音抓取机器人
2012-05-24 09:22:06 来源:WEB开发网图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算法的原因,有些字节被缓冲在缓存中导致接受过程混乱等问题都是之前没有遇到过的。这些问题通过自定义的一些简单的协议得以解决。
之前还想添加一个语音提示的功能,在某个单词下载完毕之后,语音提示该单词已经下载完成。但考虑到多节点下载时单词发音反而会成为瓶颈,所以放弃了这个功能的实现。
此软件仅仅作为一个演示软件,并没有在实际的集群上运行过。软件的实际运行环境还是做了很多的假设,并不能保证深度测试的时候不出现故障。
关于软件的并发,由于希望此软件能够运行在集群上,所以就必须考虑负载均衡的问题。这里使用主从模式,服务器作为主节点,其他节点作为从节点。为了做到负载均衡,使用动态任务分配的并行模式,每个从节点在没有任务的时候向主节点索取,而不是被动的从主节点接受。动态任务分配的模式可以保证各个节点都处于繁忙状态,最小化负载不均带来的问题。
- ››分布式计算多机部署与配置
- ››分布式单词发音抓取机器人
- ››分布式网络爬虫关键技术分析与实现一网络爬虫相关...
- ››分布式 DBA: 创建和使用分区表
- ››分布式 Key-Value 存储系统:Cassandra 入门
- ››分布式 DBA: Cursor Stability Isolation Level 的...
- ››分布式 DBA:存储、I/O 和 DB2,第 1 部分(针对在...
- ››分布式管理:用 HADR 减少停机时间(详细解释如何...
- ››分布式 DBA:使用物化查询表
- ››分布式存储系统的实现
- ››分布式 DB2 UDB 服务器对比
- ››分布式DBA:掌握SQL存储过程
更多精彩
赞助商链接