我正在尝试使用tempfile
创建一个临时文件对象,该对象将在多线程情况下使用,当主线程存在时(通常或由于异常),我希望将其清除。我在主线程上打开临时文件,并在守护程序线程上引用它。 tempfile对象是类的属性(如示例中所示)。
下面的示例1是产生问题的最低要求。运行它(并在守护进程线程进行几次打印后按Enter键)会导致临时文件在程序退出时不会被删除。
我假设这与test
对象的范围有关,因为它与守护程序线程有关。示例2是一个轻微的修改,不会产生问题(临时文件在终止时被删除)。
我当前的解决方法是使用test
在atexit
对象上注册清除函数,以在临时文件上调用close
,但是这似乎并不理想。如果有人可以阐明这种行为,将不胜感激。
import tempfile
import threading
import time
class test():
def __init__(self):
self.tf = tempfile.NamedTemporaryFile()
def worker(self):
while True:
print self.tf.name
time.sleep(1)
test = test()
t = threading.Thread(target=test.worker)
t.daemon = True
t.start()
raw_input()
import tempfile
import threading
import time
class test():
def __init__(self):
self.tf = tempfile.NamedTemporaryFile()
test = test()
def worker():
while True:
print test.tf.name
time.sleep(1)
t = threading.Thread(target=worker)
t.daemon = True
t.start()
raw_input()