Python tempfile не очищен - PullRequest
       30

Python tempfile не очищен

0 голосов
/ 29 ноября 2018

Я пытаюсь использовать tempfile для создания временного файлового объекта, который я буду использовать в многопоточной ситуации, которую я хочу очистить, когда основной поток существует (либо нормально, либо из-за исключения).Я открываю tempfile в главном потоке и ссылаюсь на него в потоке демона.Объект tempfile является атрибутом класса (как в примерах).

Пример 1 ниже - это минимум, необходимый для создания проблемы.Запуск его (и нажатие клавиши enter после нескольких отпечатков из потока демона) приводит к тому, что временный файл не удаляется при выходе из программы.

Я предполагаю, что это как-то связано с областью действия testобъект как он связан с потоком демона.Пример 2 представляет собой небольшую модификацию, которая не приводит к проблеме (временный файл удаляется после завершения).

Мой текущий обходной путь - зарегистрировать функцию очистки для объекта test с помощью atexit для вызова * 1011.* на временном файле, однако он кажется не идеальным.Если кто-то может пролить свет на это поведение, оно будет оценено.

Пример 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()
...