完成执行某项任务后停止线程

时间:2015-09-01 19:31:23

标签: python multithreading python-2.7 selenium selenium-chromedriver

所以我写了一些代码,当按下“STOP”按钮时会停止一个线程。它有效,但有一些警告。它倾向于将资源冻结一两秒,并且一旦按下它就会停止所有资源。我希望停止按钮一旦完成正在进行的操作就停止该线程。

这是我为停止事件创建的函数:

def Stop(self, event):
    if myClass.worker != None:
        if myClass.browser!=None:
            while(myClass.browser.quit()!=None):
                myClass.browser.quit()
        myClass.worker.stop()
        myClass.worker = None
        while True:
            try:
                myfile = open(self.fpath, "r+")
                myfile.close()
                break
            except IOError:
                myClass.closeIt(self)
        os.unlink(self.fpath)
        os.rename(self.temp, self.fpath)

基本上如果没有生成线程(因此它不是None),它退出浏览器窗口然后停止从浏览器上的网页抓取信息的线程。然后它保存正在写入的文件。

实际停止的线程是我创建的openExcel类的一个实例:

myClass.worker = openExcel(temp)

此类的实例调用名为findDomains的函数:

def findDomains(self,searchrow, numrows, sheet, wbook):
    for i in range(searchrow, numrows):
        domain = sheet.cell_value(i, 2)

        if domain == "":
            company = sheet.cell_value(i, 1)
            self.browser.get('https://www.google.com/')
            wait = WebDriverWait(self.browser, 300)
            inputGoogle=wait.until(EC.presence_of_element_located((By.NAME, "q")))
            inputGoogle.clear()
            inputGoogle.send_keys(company)
            inputGoogle.submit()

            self.browser.refresh()
            tries = 0
            while tries<1000:
                try:
                    domain=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "cite._Rm")))
                    domain = domain.text
                    break
                except StaleElementReferenceException:
                    tries+=1
                    self.browser.refresh()

            domainlength=len(domain)
            period=0
            for charac in range(domainlength):
                if domain[charac]==".":
                    period+=1
            if period==1:
                if "//" in domain:
                    domain = domain.split("//",1)[1]
                index = domain.find("/")
                domain = domain[:index]
            elif period > 1:
                domain = domain.split(".",1)[1]
                index = domain.find("/")
                domain = domain[:index]

            checkdom=domain.split(".",1)[0]

            if (checkdom+".") not in domain:
                domain="error"

            worksheet.write(i,2,domain)
            wbook.save(file)

我不想停止它在此功能中所做的一切,而是希望停止功能等到“域”保存到Excel工作表中。 I.E.在尝试关闭浏览器并退出之前,它要完成它正在做的事情。

0 个答案:

没有答案