【发布时间】:2015-01-13 21:43:22
【问题描述】:
以下代码:
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 或任务,我无法这样做。有没有办法让我删除或停止我使用任何可能的方式创建的线程?我不在乎这样做是坏的还是乱七八糟的,我只想让它停下来。
【问题讨论】:
-
函数
set_timeout是一个闭包,可以访问task和传递给task_create的参数。此外,创建一个字典,然后使用**将其转换为命名函数参数,这会违背关键字参数的目标。调用仅返回self作为__init__中的最后一个操作的函数也不会澄清您的代码。最后,busy-looping 在 CPU 方面非常昂贵。也就是说,您需要告诉您的线程终止,例如使用一个条件,然后等待它终止。您应该能够轻松地在网上找到示例。
标签: python multithreading task