Size: a a a

2021 November 23

AK

Alex Kalinin in Python
а зачем тебе тогда асинхронная БД? Я так понимаю, у тебя по факту синхронное приложение.
источник

МС

Максим Скуйбида... in Python
Нет, не синхронное. Кроме работы с бд у меня нету ничего блокирующего
источник

AK

Alex Kalinin in Python
сомневаюсь :)
источник

AK

Alex Kalinin in Python
еще раз, у тебя по факту синхронное приложение, потому что оно с БД работает синхронно. Так зачем мучиться вообще? Сделай обычное приложение на тредах и все.
источник

T

Tishka17 in Python
я вообще не понял, а в синхронном стиле ты где сессии поулчаешь?
источник

МС

Максим Скуйбида... in Python
Раньше она была глобальной(я уже понял, что так делать нельзя). Сейчас я делаю рефакторинг кода, и пытаюсь сделать правильную работу с бд
источник

T

Tishka17 in Python
Ну и всё решится, когда у тебя будут нормальные сессии, асинк тут не при чем
источник

МС

Максим Скуйбида... in Python
Можешь, пожалуйста, показать пример, как должно быть сделано? Может шаблон какой то? Чтобы если и переделать, то правильно переделать
источник

T

Tishka17 in Python
Переслано от Tishka17
Короче, принцип работы с соединениями такой: в начале обработки чего либо (веб-запроса, сообщения в телеге и т.п.) достаешь соединение, в конце обработки - возвращаешь туда откуда достал
источник

T

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

Юзкейс обычно не открывает соединения, так это может быть не очень эффективно, но оперирует транзакциями в которых вызывает единичные действия

Хэндлер вызывает один или несколько юзкейсов в рамках соединения которое он получил сам или из мидлвари.

Как правило удобнее соединения открывать и закрывать в мидлваре, так как она знает о начале и конце обработки события. А у каждого события должен быть свой коннект
источник

МС

Максим Скуйбида... in Python
А как этот Коннект правильно передавать в функции, выполняющие запросы?
источник

T

Tishka17 in Python
def func(session, args)
источник

D

Dmitry in Python
Как правило удобнее соединения открывать и закрывать в мидлваре, так как она знает о начале и конце обработки события. А у каждого события должен быть свой коннект
источник

D

Dmitry in Python
пример, нужно сходить туда-то, получить ответ, сохранить в бд
источник

МС

Максим Скуйбида... in Python
А насколько нормальный вариант положить в contextvar?
источник

D

Dmitry in Python
сходить туда-то - падает в таймаут
источник

T

Tishka17 in Python
хуевый
источник

МС

Максим Скуйбида... in Python
Почему? Интересно понять почему, чтобы не допускать подобных ошибок
источник

T

Tishka17 in Python
потому что сраные глобалы
источник

T

Tishka17 in Python
Telegram
Tishka17 in Python
Недостатки глобальных переменных:

1. Неконтролируемый доступ. Так как они не передаются явным образом, к ним можно легко получить доступ с помощью из слоев абстракции, которые о них не должны вообще знать.
  Пример такой ошибки: обращение в БД из html-шаблонов

2. Усложнение использования кода из-за неявных связей. Невозможно глядя на функцию понять, что ей нужно для работы.
  Например, если мы вызываем функцию foo, а она вызывает функцию bar, а так вызывает функцию baz, которая обращается к глобальной переменной XXX, мы не можем догадаться что XXX надо иницилизировать для использования foo.
  Это можно документировать, но наличие такой документации невозможно проверять автоматически.

3. Неконтролируемый жизненный цикл. Глобальная переменная существует в глобальном скоупе и соответственно к ней есть доступ ещё на этапе импорта.
  Соответственно если мы хотим инициализировать её чем-то кроме константы, мы должны контролировать порядок импортов или делать инициализацию так же на этапе импорта.
  Так…
источник