gpt4 book ai didi

python - 无法使用 selenium 线程关闭进程

转载 作者:太空宇宙 更新时间:2023-11-03 18:53:38 25 4
gpt4 key购买 nike

我已经被这个问题困扰了一段时间了,但我无法解决它。我正在创建子进程,然后这些子进程打开更多进程(实际上是 selenium webdrivers )。 Webdriver 很容易崩溃,所以我构建了这个分层系统,以便主进程可以生成子进程,并在需要时杀死/重制它们。

我面临的问题是,如果我运行主线程并按 Ctrl+C,所有子线程以及这些子线程的子线程(浏览器)都会死亡。但是当我尝试以编程方式执行此操作时,无论是 ((Popen) proc).kill(),我都尝试过 SIGINT、SIGTERM。我尝试过,.terminate、os.kill、os、killpg。无论我做什么,selenium 进程都不会死掉,但是当我按下 Ctrl+C 时,它们都会死掉。

代码:这是我制作线程的方法。这怎么会导致问题?

proc = subprocess.Popen( ["python", module_path() + "/scraper.py"], stdout=subprocess.PIPE ,stdin=subprocess.PIPE)

所以我的主要问题是,有没有办法调用终端中发生的 Ctrl+C 效果。我最初尝试使用线程,但它们只是一直死锁(为什么我不知道,它们没有共享内存,没有依赖项)。 Python 不是我的主要语言,任何帮助都是沉淀。

谢谢。基兰

最佳答案

最后我解决了。我更改了程序,以便有一个管理进程和一个子进程。管理器产生了几个子级,而子级又产生了 selenium 浏览器。管理器等待子进程崩溃,当子进程崩溃时,管理器杀死子进程,从而杀死 selenium 进程。

proc =  subprocess.Popen( ["python" , path + "/pythonChild.py"], preexec_fn=os.setsid, stdout=subprocess.PIPE ,stdin=subprocess.PIPE)
os.killpg( proc.pid, 9 )

上面的代码只会创建并杀死它,但是通过添加预执行它会启动一个新的进程组,然后可以终止该进程组并杀死其所有子进程。

希望这对某人有帮助!

关于python - 无法使用 selenium 线程关闭进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17749525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com