python - 停止 python 中的 threading.Thread

标签 python multithreading task

以下代码:

import time
import threading
tasks = dict()

class newTask(object):

    def __init__(self, **kw):
        [setattr(self, x, kw[x]) for x in kw]
        self.object_ret()

    def object_ret(self): return self

def task_create(name, timeout, function):
    task = newTask(**{
        'timeout': int(timeout),
        'function': function,
        'start': time.time()
        })
    def set_timeout(v):
        while True:
            if (time.time() - v.start) > v.timeout:
                v.function()
                v.start = time.time()
    tasks[name] = threading.Thread(target=set_timeout, args=(task,))
    tasks[name].start()

def stop(x):
    #stops the thread in tasks[x]

是一个简单的任务系统,我用它来执行诸如 ping 和超时之类的小任务。这适合我的需要,但如果我想停止正在运行的 ping 或任务,我没有办法这样做。有没有办法让我删除或停止我使用任何可能的方式创建的线程?我不在乎这样做是否不好或困惑,我只是希望它停止。

最佳答案

我建议如下:

  1. 在 newTask.init 函数中,添加一行“self.alive = True”
  2. 在 set_timeout 函数中,将“while True:”替换为“while v.alive:”
  3. 将 newTask 对象存储在“任务”字典中,而不是线程对象。
  4. stop(x) 函数只有一行:“tasks[x].alive = False”

这将导致线程在调用 stop(x) 时终止,其中 x 是线程的名称。它提供了一种机制,允许线程终止而不会以某种虚假的方式杀死它。我知道您说过您不在乎,但如果您希望多线程程序正常工作,您确实应该关心。

第二个建议:仔细阅读 Ulrich Eckhardt 的评论并认真对待;他的所有观点都得到了很好的理解。

关于python - 停止 python 中的 threading.Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27932051/

相关文章:

python - 如何将数据帧与数组时间戳合并并根据数组的条件进行绘图?

java - Java中线程完成时关闭资源

c++ - C++ 的线程安全 vector 类

c# - 两个并行等待参数

python - 用于机器学习预测的请求正文中的 FastAPI JSON 数组

python - 在Python中给定NumPy数组的情况下,如何流式传输MP3 block ?

python - 具有多个分布的 seaborn distplot/displot

c - 如何允许某些线程优先锁定互斥量使用 PTHREADS

C - 如何检查进程是否为系统进程?

c - 用于编译和运行 .c 文件的 Visual Studio Code 任务