所以我有一些使用多线程的简单代码。它工作得很好但是我注意到线程在返回值后没有被销毁,因为每次脚本运行时,控制台中的线程号都会增加并且正在使用的 RAM 在脚本完成处理后也会增加(哪个暗示在脚本完成处理后还有一些东西在运行)。
在研究了this、this、this和this之后,我注意到我的线程可能没有加入(?),因为我的脚本从不打印“Threads Destroyed”。谁能建议可能出了什么问题?
if __name__ == "__main__":
def run_selenium1(a, b, c, d, e):
@st.cache_data(show_spinner=False)
def get_links(i, resumeContent):
#stufff happens
for something1, something2, something3, something4, something5, something6, something7 in zip(Final_Something1, Final_Something2, Final_Something3, Final_Something4, Final_Something5, Final_Something6, Final_Something7):
Final_Array.append((something1, something2, something3, something4, something5, something6, something7))
driver.close()
driver.quit()
except:
driver.close()
driver.quit()
with webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) as driver:
try:
#links are obtained
except:
driver.close()
driver.quit()
threads = []
for i in links:
t = threading.Thread(target=get_links, args=(i, Content))
t.daemon = True
threads.append(t)
t.start()
for t in threads:
t.join()
print("Threads destroyed") #<---- this isn't printed
要对此进行测试,请尝试添加线程正在完成的通知:
if __name__ == "__main__":
def run_selenium1(a, b, c, d, e):
@st.cache_data(show_spinner=False)
def get_links(i, resumeContent):
#stufff happens
for something1, something2, something3, something4, something5, something6, something7 in zip(Final_Something1, Final_Something2, Final_Something3, Final_Something4, Final_Something5, Final_Something6, Final_Something7):
Final_Array.append((something1, something2, something3, something4, something5, something6, something7))
print("About to close ",i)
driver.close()
driver.quit()
print("Closed and quit ",i)
except:
print("Error on ",i)
driver.close()
driver.quit()
print("Error closed and quit ",i)
with webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) as driver:
try:
#links are obtained
except:
driver.close()
driver.quit()
threads = []
for i in links:
t = threading.Thread(target=get_links, args=(i, Content))
t.daemon = True
threads.append(t)
t.start()
for i,t in enumerate(threads):
print("Trying to Join thread #",i)
t.join()
print("Threads destroyed") #<---- this isn't printed