class ReptileCtrl: ''' Reptile 控制程序 将以一个控制线程的方式运行 接受 人机界面的控制 ''' def __init__(self, homeUrls, continueRun, urlist, urlQueue, maxPages, pages, imagenum, outSignalQueue): ''' 需要掌握的数据: homeUrls urlist urlqueue pages maxpages ''' self.homeUrls = homeUrls #continue weather reptils continue run self.continueRun = continueRun self.urlist = urlist self.urlQueue = urlQueue self.pages = pages self.imagenum = imagenum self.maxPages = maxPages #向控制端陈需传递消息 self.outSignalQueue = outSignalQueue self.urlparser = UrlParser(homeUrls) self.htmlparser = HtmlParser(self.urlparser) self.htmldb = HtmlDB(self.htmlparser) def stop(self): ''' 直接停止运行 ''' print '.. stop ..' self.continueRun[0] = False def halt(self): ''' 中断 保存: urlist urlqueue pages maxpages ''' print '.. halt ..' self.continueRun[0] = False #should use timer to sleep for some seconds time.sleep(halt_wait_time) self.htmldb.saveHomeUrls(self.homeUrls, self.maxPages, self.pages) #开始保存 urlist = self.urlist.getAll() #save it self.htmldb.saveList(urlist) urlqueue = self.urlQueue.getAll() #保存 self.htmldb.saveQueue(urlqueue) def resume(self): ''' resume from database init urlqueue and urlist ''' def clearList(_List): _size = len(_List) for i in range(_size): _List.pop() def resumeHomeurl(homeurls): ''' homeurls= [ [title, url], ] ''' #clear [] to empty clearList(self.homeUrls) for u in homeurls: self.homeUrls.append(u) def resumePages(localpages, pages): ''' resume pages or maxpages maxpages = [ 1,2,3, ] ''' clearList(localpages) for i in pages: localpages.append(i) status = self.htmldb.getStatus() _homeurls = status['homeurls'] resumeHomeurl(_homeurls) #resume maxpages resumePages(self.maxPages, status['maxpages']) #resume pages resumePages(self.pages, status['pages']) #resume urlist self.urlist.resume(status['urlist']) #resume urlqueue self.urlQueue.resume(status['homeurls'], status['urlqueue']) def status(self): ''' return status ''' _queue_num = [] signal = { 'type': 'status', 'pages': self.pages, 'imagenum': self.imagenum[0], 'queue_num': self.urlQueue.sizes, 'list_num': self.urlist.getNum(), } print signal self.outSignalQueue.put(signal)