Python临时文件未清理

时间:2018-11-29 19:13:26

标签: python-2.7 object python-multithreading temporary-files

我正在尝试使用tempfile创建一个临时文件对象,该对象将在多线程情况下使用,当主线程存在时(通常或由于异常),我希望将其清除。我在主线程上打开临时文件,并在守护程序线程上引用它。 tempfile对象是类的属性(如示例中所示)。

下面的示例1是产生问题的最低要求。运行它(并在守护进程线程进行几次打印后按Enter键)会导致临时文件在程序退出时不会被删除。

我假设这与test对象的范围有关,因为它与守护程序线程有关。示例2是一个轻微的修改,不会产生问题(临时文件在终止时被删除)。

我当前的解决方法是使用testatexit对象上注册清除函数,以在临时文件上调用close,但是这似乎并不理想。如果有人可以阐明这种行为,将不胜感激。

示例1

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()

示例2

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()

0 个答案:

没有答案