После прочтения МНОГО данных о предмете я все еще не мог найти какое-либо реальное решение моей проблемы (их может и не быть).
Моя проблема заключается в следующем:
В моем проекте у меня есть несколько драйверов, работающих с различными аппаратными средствами (диспетчерами ввода-вывода, программируемыми нагрузками, блоками питания и т. Д.).
Инициализация подключения к этим аппаратным средствам является дорогостоящей (вовремя), и яне могу открыть, а затем закрыть соединение для каждой итерации связи между нами.
Значение Я не могу сделать это (при условии, что программируемая загрузка реализует вход / выход):
start of code...
with programmable_load(args) as program_instance:
programmable_load_instance.do_something()
rest of code...
Поэтому я выбрал другое решение:
class programmable_load():
def __init__(self):
self.handler = handler_creator()
def close_connection(self):
self.handler.close_connection()
self.handler = None
def __del__(self):
if (self.handler != None):
self.close_connection()
По очевидным причинам я не «доверяю» деструктору при вызове, поэтому я явно вызываю close_connection (), когда хочу завершить свою программу (для всех драйверов).
Проблема возникает, когда я резко прекращаю процесс, например, когда я запускаю в режиме отладки и прекращаю отладку.
В этих случаях процессзавершается без запуска через деструкторы.Я понимаю, что ОС на этом этапе очистит всю неиспользуемую память, но есть ли способ очистить память организованным образом?
и, если нет, есть ли способ заставить функцию отладки завершить работуопределенный набор функций?Знает ли процесс python, что он получил довольно отладочное событие, или он рассматривает его как обычное завершение?
Операционная система: Windows