如何停止线程内的整个代码

发布于 2025-01-10 12:35:38 字数 682 浏览 0 评论 0原文

我正在使用 selenium 和线程,并且我有一个函数 check_browser_running 来检查浏览器是否仍在运行:

def check_browser_running()
  while True:
    try:
      driver.title
    except WebDriverException:
      print("DRIVER WAS CLOSED")

然后我在线程中运行此函数以让其他代码运行:

th = threading.Thread(target=check_browser_running)
th.start()

最后一件事是,我有一个循环函数来停止代码运行,因为如果我的代码中发生任何错误,我希望代码停止而不是退出:

def stop():
  while True:
    pass

我想要的是如何使用 stop( ) 函数通过运行线程的函数?因为如果我在线程中调用 stop() 这不会停止主代码。

I am using selenium and threading, and I have a funcion check_browser_running to check if the browser is still running or not:

def check_browser_running()
  while True:
    try:
      driver.title
    except WebDriverException:
      print("DRIVER WAS CLOSED")

then I run this function in a thread to let other code running:

th = threading.Thread(target=check_browser_running)
th.start()

Last thing is, I have a loop function to stop the code from running, because if any error happened in my code, I want the code to stop instead of exiting:

def stop():
  while True:
    pass

What I want is that how can I stop the code from running using the stop() function through a function that is running a thread?? Because if I called stop() in a thread this will not stop the main code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稀香 2025-01-17 12:35:38

您可以执行以下操作:(推荐)

import threading

running = True

def thread():
    global running

    while running:
        if(some_event):
            stop()

def stop():
    global running

    running = False

th = threading.Thread(target=thread)
th.start()

在运行 while 循环时使用变量作为标志,您可以将其设置为 false。结束循环。

或者是一个更俗气的解决方案,你只需获取 python 程序的 pid 并杀死它。

import os, signal

def stop():
    os.kill(os.getpid(), signal.SIGTERM)

无论您是否从线程中调用它,这都会杀死整个程序。

Either you can do something like this: (Recommended)

import threading

running = True

def thread():
    global running

    while running:
        if(some_event):
            stop()

def stop():
    global running

    running = False

th = threading.Thread(target=thread)
th.start()

Where you run a while loop with a variable as a flag you can set to false. To end the loop.

Or a tackier solution where you just get the pid of the python program and kill it.

import os, signal

def stop():
    os.kill(os.getpid(), signal.SIGTERM)

Which will kill the entire program regardless if you call it from withing a thread.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文