Я пытаюсь использовать 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()