【发布时间】:2020-10-26 17:16:28
【问题描述】:
我正在尝试创建一个方法来创建线程并将它们发送到线程池中。创建单个线程后如何停止它们? 编辑:这是用于网络抓取,需要在后台运行数天,它将是动态数量的进程和许多其他任务(我只添加了 1 以供参考。我也不希望进程完成后结束(将循环任务)仅在用户请求时结束
def Target(web,delay):
log = ("starting")
# gives headless option to chromedriver
op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)
# launches driver with desired webpage
driver.get(web)
log = ("getting webpage")
while [False != True]:
try:
#test to check if on correct page
#looking for matching key
log = ("checking stock")
elem = driver.find_element_by_xpath('//*[@id="viewport"]/div[5]/div/div[2]/div[3]/div[1]/div/div[3]/div[1]/div[2]/button')
if elem.is_displayed():
log = ("instock")
title= driver.title
url= driver.current_url
return (title, url)
except NoSuchElementException:
print("product is not in stock.... trying again")
#retry delay
time.sleep(float(delay))
driver.get(web)
def multimethodv2(MethodToRun, url, delay,id):
if __name__ == "__main__":
pool = ThreadPoolExecutor()
pool.submit(Target,url,delay)
【问题讨论】:
-
if __name__ == "__main__"在函数内部不是很地道 -
如果你只运行一个任务,那么在这里使用线程池是没有意义的。如果您正在运行多个任务,请参阅Python selenium multiprocessing 了解有关如何初始化线程的想法,这样您就不会一遍又一遍地重新创建驱动程序。特别是,请参阅my refinement to this,它会修改接受的答案以确保在您完成后终止驱动程序进程。
-
现在,你根本没有给
driver.quit()打电话,这不是一件好事。 -
这是用于网页抓取,需要在后台运行几天,它将是动态数量的进程和许多其他任务(我只添加了1个供参考)跨度>
标签: python multithreading