Ноутбуки, такие как Jupyter, делят интерактивное исполнение на ячейки. В целом это работает довольно хорошо для меня, с заметным исключением: менеджеры контекста. Если я открою оператор with
, конец ячейки закроет контекст, менеджер контекста закроется.
Допустим, мой блокнот работает с данными, полученными из СУБД. Обычно я использую диспетчеры контекста для управления соединением с базой данных и управления курсорами для автоматической фиксации или отката транзакций. Но тогда весь мой код должен был бы находиться в одной ячейке после установления соединения.
Обходной путь - , а не использование менеджеров контекста, которые потенциальные ловушки помогают менеджерам контекста предотвратить , Проблема усиливается IMO в ноутбуках, когда клетки могут быть (действительно) выполнены в любом порядке. В моем примере СУБД несколько соединений с БД могли быть открыты без закрытия, так как ячейка, устанавливающая соединение, выполнялась несколько раз. Более того, возможно, что они даже не являются «встроенной» версией диспетчера контекста, например, когда диспетчер контекста является декорированной функцией @contextlib.contextmanager
, хотя я не видел, чтобы это происходило ни в одной из основных библиотек, которые я использую.
Я, наверное, просто ругаю, но есть ли способ сделать дружественное выполнение ячеек контекстного менеджера? Или мы просто обязаны использовать кратковременные контекстные менеджеры и сами по себе в противном случае?