首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Selenium多线程不能工作

Python Selenium多线程不能工作
EN

Stack Overflow用户
提问于 2021-01-08 20:51:25
回答 2查看 865关注 0票数 0

我在python工作过selenium。我想使程序多线程(4-10个线程),但它不能工作。我也不知道原因。

启动时:输出:线程启动!

应该发生什么:输出:线程启动了!线程启动了!线程启动了!线程启动了!线开始了!..。

以下是我尝试过的:

代码语言:javascript
运行
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-08 21:14:23

你有三个问题。首先,你说:

代码语言:javascript
运行
复制
worker = Thread(target=bot())

它应该是:

代码语言:javascript
运行
复制
worker = Thread(target=bot)

第二个问题是下面一行:

代码语言:javascript
运行
复制
worker.setDaemon(True)

你能说出你为什么这么做吗?守护进程线程是在所有非守护进程线程终止后立即自动终止的线程。您有一个非守护进程线程,即在函数main()中启动所有这些守护进程线程的主线程。一旦main返回(在启动所有这些dameon线程之后),它就会终止!因此,所有守护进程线程都会随之结束。这就是你需要的:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
driver.close()

应:

代码语言:javascript
运行
复制
driver.quit()

不仅关闭窗口,而且终止进程并允许线程终止。

票数 2
EN

Stack Overflow用户

发布于 2021-01-08 21:03:36

您尝试过删除while True函数中的bot()吗?线程意味着主程序多次执行您的辅助功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65636226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档