Файл, который Вы создаете с TemporaryFile
или NamedTemporaryFile
, автоматически удален, когда он закрывается, который является, почему Вы получаете ошибку. Если Вы не хотите это, можно использовать mkstemp
вместо этого (см. документы для tempfile).
>>> import tempfile, shutil, os
>>> fd, path = tempfile.mkstemp()
>>> os.write(fd, 'foo')
>>> os.close(fd)
>>> shutil.copy(path, 'bar.txt')
>>> os.remove(path)
Класс BackgroundWorker в основном абстрагирует процесс создания и мониторинга Thread , а также предоставляет управляемый событиями API для отчета о ходе операции ( ProgressChanged ) и определить, когда ваша операция будет завершена ( RunWorkerCompleted ) ...
Одно из наиболее распространенных применений - поддержание отклика графического интерфейса Windows во время длительного процесс выполняется в фоновом режиме. По сути, это просто оболочка для System.Threading.Thread, предназначенная для упрощения фоновой потоковой передачи (как следует из названия!)
BackgroundWorker
на самом деле является оболочкой для вызова асинхронного потока через делегатов - используя отражатель, можно увидеть, что он соответственно вызывает методы вызова начала / конца. Это отличается от System.Threading . Поток
в том смысле, что он использует пул потоков, а не запускает новый поток.
Основная причина использования фонового рабочего процесса заключается в том, что он хорошо сочетается с приложениями форм Windows.