我对Python中的Timer对象有疑问: https://docs.python.org/2/library/threading.html#timer-objects
此对象基本上是一个在用户定义的秒数后调用特定函数的Thread。我的问题是:在函数调用之后,Thread对象会自动消除程序,或者这个对象是否继续运行,消耗内存?
这段代码显示了我在说什么:
from threading import Timer
from random import randint
def call_function(x):
print "Timer number " + str(x) + " hit call function!"
for x in range(200000):
#memory used: 700.000 K
print "Creating timer number: " + str(x)
Timer(randint(1, 10), call_function, [x]).start()
在200.000个线程之后,Timer创建并在10秒的空间内被调用(在此调用之后它们应该已经死了,释放空间,对吗?),程序以700.000 K的内存消耗结束它,几乎为1 GB 。
谢谢,
答案 0 :(得分:2)
Timer
只是一个Thread subclass(由名为Timer
的工厂函数创建),运行方法简单:
class _Timer(Thread):
def __init__(self, interval, function, args=[], kwargs={}):
Thread.__init__(self)
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.finished = Event()
def cancel(self):
self.finished.set()
def run(self):
self.finished.wait(self.interval)
if not self.finished.is_set():
self.function(*self.args, **self.kwargs)
self.finished.set()
线程在run()
方法终止后终止:
一旦线程的活动开始,就会考虑线程 '活'。当run()方法终止时它停止活动 - 通常,或通过提出未处理的例外。 is_alive() 方法测试线程是否存活。
计时器类对象本身应该自动进行垃圾收集,如果以后不再使用的话。
你不能启动200000个线程,它太多了(_Timer对象将被创建,但线程将无法启动)。请检查此问题:How many threads is too many?