Post ATg1Qdig9XOUBLAYt6 by dima@social.3dots.lv
 (DIR) More posts by dima@social.3dots.lv
 (DIR) Post #ATfiapeIkwhcwmGhs0 by mo@mastodon.ml
       2023-03-16T11:36:28Z
       
       0 likes, 0 repeats
       
       Что за ебаная магияВот есть в главном модуле глобальная переменнаяrmq_connectionтакже, есть on_startup хук в aiogram, который подключается и присваивает ей значениеа ещё есть хендлер, который делает внутри себя import main и потом берет это значениеТак вот, в хендлере по непонятным причинам видно только старое значение, заданное до выполнения on_startup....
       
 (DIR) Post #ATfigBp5k0bPANs0mW by mo@mastodon.ml
       2023-03-16T11:37:27Z
       
       0 likes, 0 repeats
       
       inb4: on_startup присваивает значение именно глобальной переменной, а не в своем скоупеasync def init(...):   global rmq_connection   ...
       
 (DIR) Post #ATfziP3VDFAe0RFgLA by mo@mastodon.ml
       2023-03-16T14:48:20Z
       
       0 likes, 0 repeats
       
       Фан факт, проблема вылечилась импортом магического модуля __main__ и затыканием ide по поводу того, что такого пакета нет в зависимостяхОказывается, для питона это разные модули, и если импортировать main по его пути, без магии, то он его загрузит заново....
       
 (DIR) Post #ATg0IbMuuU2ucTas9A by dima@social.3dots.lv
       2023-03-16T14:54:52Z
       
       0 likes, 0 repeats
       
       @mo Если первый вариант был такимfrom main import rmq_connectionТо новые значения rmq_connection не будут видны.import main....print(main.rmq_connection)Должен видеть новое значение.
       
 (DIR) Post #ATg0jdbkgzlLNpQNxQ by mo@mastodon.ml
       2023-03-16T14:59:46Z
       
       0 likes, 0 repeats
       
       @dima а хуй там, он даже так видит значение до инициализации :)и да, оно там не меняется. Оно один раз лениво инициализируется, и уже после этого используется в нижележащих модуляхПросто для его инициализации нужен IO, а используется оно одно на всю программу (потому что установка соединения это относительно затратно, и поэтому в RabbitMQ есть свой уровень мультиплексирования — каналы)
       
 (DIR) Post #ATg1Qdig9XOUBLAYt6 by dima@social.3dots.lv
       2023-03-16T15:07:29Z
       
       0 likes, 0 repeats
       
       @mo интересно, но не понятно, почему он видит старое значение.Я стараюсь такие ситуации избегать или созданием объекта, который хранит состояние и передается кому надо, или избежанием присваиванияВместоdef f():    global x = 1Что-то типаx = []def f();    x.append(1)Список это просто пример мутабельной структуры.
       
 (DIR) Post #ATg1XqxLL1ivGGT5Iu by mo@mastodon.ml
       2023-03-16T15:08:51Z
       
       0 likes, 0 repeats
       
       @dima скорее всего, я на 90% уверена — он не может понять, что package.main это главный модуль. Поэтому он его импортирует как обычно, но функция инициализации при этом не вызывается
       
 (DIR) Post #ATg1aTpVmHJKPB3dE8 by mo@mastodon.ml
       2023-03-16T15:09:20Z
       
       0 likes, 0 repeats
       
       @dima т.е там тупо два разных модуля main. Один как package.main, второй как __main__
       
 (DIR) Post #ATg1mOSLaAslDKu4Dg by dima@social.3dots.lv
       2023-03-16T15:11:17Z
       
       0 likes, 0 repeats
       
       @mo это загадка для меня. Тут надо код смотреть
       
 (DIR) Post #ATg235n2EjPSFDXhey by mo@mastodon.ml
       2023-03-16T15:14:31Z
       
       0 likes, 0 repeats
       
       @dima если б я не была занята, я бы накидала MRE, но как нибудь потом.
       
 (DIR) Post #ATg290TCvcc9U05YCu by dima@social.3dots.lv
       2023-03-16T15:15:24Z
       
       0 likes, 0 repeats
       
       @mo ок, у меня тоже дела