以下代码:
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或任务,我就无法这样做。有没有办法让我删除或停止使用任何可能的方式创建的线程?我不在乎这样做是不是坏事还是凌乱,我只是想让它停止。
答案 0 :(得分:2)
我建议如下:
这会导致线程在调用stop(x)时死亡,其中x是线程的名称。它提供了一种机制,允许线程死亡,而不会以某种虚假的方式杀死它。我知道你说你不在乎,但如果你想让你的多线程程序工作,你真的应该关心。
第二个建议:仔细阅读Ulrich Eckhardt的评论并认真对待;所有他的观点都很好。
答案 1 :(得分:0)
信号处理程序:::
def signal_handler(signal, frame):
print('You pressed Ctrl+C!')
tasks[name].stop()
sys.exit(0)
在主脚本中,注册处理程序:::
signal.signal(signal.SIGINT, signal_handler)
signal.pause()