python - Python Selenium 多线程不起作用
问题描述
我在 python 中使用硒。我想让程序多线程(4-10 个线程),但它不会工作。我不知道为什么。
当我开始时:输出:线程开始!
应该发生什么:输出:线程已启动!话题开始了!话题开始了!话题开始了!话题开始了!...
这是我尝试过的:
from selenium import webdriver
import string
import random
import time
from threading import Thread
def bot():
while True:
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging']) # Disables logging
options.add_argument('--disable-extensions')
options.add_argument('--profile-directory=Default')
options.add_argument("--incognito")
options.add_argument("--disable-plugins-discovery");
options.add_argument("--headless") # Turns Chrome into headless browser
options.add_argument("--mute-audio")
driver = webdriver.Chrome(options=options)
driver.get("https://example.com/")
driver.close()
def main():
for _ in range(10):
print("Thread started!")
worker = Thread(target=bot())
worker.setDaemon(True)
worker.start()
if __name__ == '__main__':
main()
解决方案
你有三个问题。首先,你说:
worker = Thread(target=bot())
它应该是:
worker = Thread(target=bot)
第二个问题是以下行:
worker.setDaemon(True)
你能说说你为什么这样做吗?守护线程是一个在所有非守护线程终止后将自动终止的线程。您有一个非守护线程,即在 function 中启动所有这些守护线程的主线程main()
。一旦main
返回,即在启动所有这些 dameon 线程之后立即终止!因此,所有守护线程都以它终止。这就是你需要的:
def main():
threads = [Thread(target=bot) for _ in range(10)]
for thread in threads:
thread.start()
for thread in threads:
thread.join() # wait for this thread to terminate
第三个问题在于功能bot
:
driver.close()
应该:
driver.quit()
不仅要关闭窗口,还要终止进程并允许线程终止。
推荐阅读
- c# - 如何使用 Enumerable.Empty
().AsQueryable() - mysql - 使用图数据库查找图上两个节点之间的所有可能路径
- ios - Swift 检索用户表自定义列
- git - 为什么从特定的 GitHub 存储库合并到本地 Git 存储库会导致本地存储库中未提交的更改?
- mysql - mysql更新json属性和一个查询中的另一列
- java - Jmeter:在 CSV 行中执行计算并在测试中使用计算值
- c++ - Maya 和 Cuda 11 类型重新声明错误
- python - 在这种情况下,切换到警报的命令不起作用
- reactjs - React.cloneElement 克隆已经克隆的元素以添加新的道具
- drake - 将 OMPL 与 Drake 一起使用