Горячее водоснабжение на даче и в загородном доме

Для комфортного проживания в современном загородном доме необходимо иметь систему горячего водоснабжения. Например, при наличии природного газа получение горячей воды решается установкой двухконтурного котла. Но газ есть далеко не в каждом населенном пункте. До сих пор печь во многих сельских домах остается единственным источником тепла. В таком случае печь позволяет организовать горячее водоснабжение на даче и в загородном доме.

горячее водоснабжение на даче

Если в доме имеется водяное отопление, то достаточно на выходе печного котла врезать бойлер и запитать его от водопровода. При топке печи горячая вода проходит по трубе системы отопления внутри бойлера и отдает тепло воде второго контура. Нагретая вода поступает к кранам кухни и ванной комнаты.

Читать

Зачем в python with

Долгое время при работе с файлами из python я писал примерно следующий код:

Без подсветки синтаксиса

def some_func(fname):
    fd = open(fname)
    some_data_processing(fd.read())
    return result

 

def some_func(fname):
    fd = open(fname)
    some_data_processing(fd.read())
    return result

 

Тут предполагается, что в любом случае при выходе из функции переменная fd уничтожится и вместе с ней закроется файл и все будут жить долго и счастливо.

Но что будет если в some_data_processing произойдет исключение?

Например так:

Без подсветки синтаксиса

import sys

class TestClass(object):
def __del__(self):
print «I’m deleted»

def data_process():
obj = TestClass()
raise IndexError()

try:
data_process()
except:
print «In exception handler»

print «after except»

 

import sys

class TestClass(object):
def __del__(self):
print «I’m deleted»

def data_process():
obj = TestClass()
raise IndexError()

try:
data_process()
except:
print «In exception handler»

print «after except»

 

На консоли появляется:

    In exception handler
    after except
    I'm deleted

Почему-то «In exception handler» и «after except» выводятся раньше «I’m deleted».

Первая проблема в том, что вместе с исключением питон хранит и трейс стека, содержащий все фреймы вплоть до породившего исключение. А внутри фрейма живет f_locals — словарь локальных переменных, и именно он имеет ссылку на экземпляр класса TestClass. Таким образом до окончания обработки исключения obj будет жить точно. Почему же «after except» появляется раньше чем «I’m deleted»? Было бы логично чистить трейс после успешного выхода из блока try. Дело в том что 2.X питон не всегда чистит внутренние структуры после обработки исключения и в общем случае вы должны явно вызывать функцию sys.exc_clear чтобы очистить их. Когда я подошел с этим вопросом к Larry Hastings (одному из основных разработчиков ядра питона) ему потребовалось около 20ти минут, что-бы понять что происходит и найти в документации sys.exc_clear. (Правда стоит отметить, что он давно использует 3.X, где это поведение стало адекватнее.) В 3.X это поведение улучшили, и теперь sys.exc_clear автоматически вызывается окончанию обработки исключения.

Кстати, если вы напишете примерно такой код:

Без подсветки синтаксиса

try:
    data_process()
except:
    fr = sys.exc_info()[2]
    del fr

 

try:
    data_process()
except:
    fr = sys.exc_info()[2]
    del fr

 

то не забудьте удалить fr используя del, как в последней строке — иначе он образует циклическую ссылку с текущим фреймом и тогда все станет совсем плохо.

Стоит отметить, что подобное поведение проявляется не всегда. Например сл

Снежинки из фетра

Двусторонние снежинки из фетра

Хотя до Нового года еще практически два месяца, праздничные приготовления планировать нужно уже сегодня, иначе вы просто ничего не успеете. Предлагаем обновить елочные украшения и сшить двусторонние снежинки из фетра.

Снежинки из фетра

Читать

Параметры жестких дисков

Жесткий диск – важнейший элемент компьютера. К его выбору необходимо подойти с особой тщательностью, и при необходимости обратиться к специалисту. Ведь жесткие дики тут используются как на серверах, так и на персональных компьютерах

Существует несколько основных параметров, на которые необходимо обращать особое внимание при выборе столь сложного устройства. Современные диски обычно производятся с вращающейся скоростью 5400-7200 оборотов за 1 минуту. Чем выше скорость, тем быстрее совершается обмен данными. Но следует учитывать, что при высокой скорости вращения возрастает температура корпуса, и такие жесткие диски требуют внешнего охлаждения (например, вентилятор собственного диска). Читать

Дешевая мебель для офиса

Как организовать рабочее пространство в небольшой комнате, превратив ее в домашний офис и не затратив на это слишком много денег?

дешевая офисная мебель

Если вы решили создать домашний офис, то, скорее всего, вы начинаете собственный бизнес. В таком случае вам нужна дешевая мебель для офиса, чтобы сэкономить больше средств на развитие бизнеса.

Читать