无法使用selenium线程关闭进程

2024-06-02 16:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我面临的问题是,如果我运行主线程并按Ctrl+C,那么所有的子线程和这些子节点(浏览器)的子节点都会死亡。但是当我尝试用编程的方式来实现这个过程,不管它是((Popen)proc).kill(),我都尝试过SIGINT,SIGTERM。我试过了,终止了,os.杀死,操作系统,killpg。不管我做什么,selenium进程都不会死,但是当我按下Ctrl+C时,它们都会死。在

代码: 下面是我如何做线。这怎么会引起问题?在

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

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

谢谢。 基兰


Tags: 节点进程分层系统selenium流程proc线程
1条回答
网友
1楼 · 发布于 2024-06-02 16:20:30

最后我解决了。我更改了程序,这样就有了一个管理器进程和一个子进程。管理器生成了几个子节点,子节点生成了selenium浏览器。管理器等待子进程崩溃,当子进程崩溃时,管理器会杀死子进程,从而终止selenium进程。在

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

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

希望这对某人有帮助!在

相关问题 更多 >