以下代码:
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 或任务,我没有办法这样做。有没有办法让我删除或停止我使用任何可能的方式创建的线程?我不在乎这样做是否不好或困惑,我只是希望它停止。
最佳答案
我建议如下:
- 在 newTask.init 函数中,添加一行“self.alive = True”
- 在 set_timeout 函数中,将“while True:”替换为“while v.alive:”
- 将 newTask 对象存储在“任务”字典中,而不是线程对象。
- stop(x) 函数只有一行:“tasks[x].alive = False”
这将导致线程在调用 stop(x) 时终止,其中 x 是线程的名称。它提供了一种机制,允许线程终止而不会以某种虚假的方式杀死它。我知道您说过您不在乎,但如果您希望多线程程序正常工作,您确实应该关心。
第二个建议:仔细阅读 Ulrich Eckhardt 的评论并认真对待;他的所有观点都得到了很好的理解。
关于python - 停止 python 中的 threading.Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27932051/