Dmitry
rukigaki
Или там где none вообще не должны выводиться?
rukigaki
rukigaki
когда ты ставишь \S, расчитывая, что будут игнорироваться пробелы и на этом все, то это не совсем так, пробел будет игнориться, но именно из-за него у тебя проходит !, а он вроде у тебе не стоит в разрешенных символах
rukigaki
так как \S - это все что угодно, кроме пробела
rukigaki
поэтому ! проходит
rukigaki
делаешь много лишнего
rukigaki
зачем ставить условие на None, когда функция и так его вернет, если это не строка
Dmitry
Patsy
Коллеги,
использую aio-pika, для работы с rabbitmq
использую connect_robust, чтобы происходил реконнект
сообщения обрабатываю через метод IncomingMessage.process
но, когда соединение рвется, то обрабатываемое сообщение теряется, как я понимаю из-за закрытия канала в коннекте
робуст при реконнекте, почему то создает новый канал, а не поднимает старый
В доке информации очень скудно, в гугл правильный запрос подобрать немогу((
Думал поискать в коде, но там не нахожу каких-то методов для гарантированной отпраки
Подскажите, пожалуйста, как мне изменить обработку таким образом, чтобы сообщение точно отправилось, после восстановления соединения?
Dmitry
Коллеги,
использую aio-pika, для работы с rabbitmq
использую connect_robust, чтобы происходил реконнект
сообщения обрабатываю через метод IncomingMessage.process
но, когда соединение рвется, то обрабатываемое сообщение теряется, как я понимаю из-за закрытия канала в коннекте
робуст при реконнекте, почему то создает новый канал, а не поднимает старый
В доке информации очень скудно, в гугл правильный запрос подобрать немогу((
Думал поискать в коде, но там не нахожу каких-то методов для гарантированной отпраки
Подскажите, пожалуйста, как мне изменить обработку таким образом, чтобы сообщение точно отправилось, после восстановления соединения?
Какая версия aio-pika?
Patsy
Dmitry
7.2.0 (последняя)
Смотри, сама суть в следующем, ты не знаешь в какой момент у тебя рвется соединение, и я тем более, отправка сообщения в протоколе это отправка минимум трех фреймов (в зависимости от размера cообщения). Если у тебя орвется конект на последнем фрейме ты не знаешь принял последний фрейм брокер или нет.
Dmitry
По умолчанию. в aio-pika включены publisher confirms. И когда ты делаешь await exchange.publish(...) пока от брокера не придет подтверждение о приеме сообщения ты на пойдешь из этого `await`а дальше
Dmitry
Но если у тебя рвется соеднинение, другого способа тебе сказать о том что "что-то пошло не так" просто нет, кроме как послать тебе в этот await исключение.
Dmitry
То есть если ты попал в такую ситуацию, когда тебе брокер на отпраке сказал что конект помер, тебе нужно самому решать, пробовать отправить еще, или действовать как-то иначе, в зависимости от логики твоего приложения.
Dmitry
НО, там как и везде есть баги, и я надеюсь до осени допилю aio-pika 8.0, где много рефакторинга
Dmitry
С точки зрения брокера нет никаких робастов, это чисто фича клиента.
Patsy
ого, вы, случайно, не Mosquito?
Dmitry
Patsy
То есть если ты попал в такую ситуацию, когда тебе брокер на отпраке сказал что конект помер, тебе нужно самому решать, пробовать отправить еще, или действовать как-то иначе, в зависимости от логики твоего приложения.
если правильно улавливаю, то, например, окружив while с try/except момент exchange.publish пытаться снова и снова. вроде бы хорошо, но тогда, не совсем понимаю, при реконнекте, канал будет пересоздан и мне, по идее, нужно снова получить объект exchange, и я не смогу уже его прокинуть в цикл с отправкой, как бы я мог выйти из этого порочного круга?
Dmitry
если правильно улавливаю, то, например, окружив while с try/except момент exchange.publish пытаться снова и снова. вроде бы хорошо, но тогда, не совсем понимаю, при реконнекте, канал будет пересоздан и мне, по идее, нужно снова получить объект exchange, и я не смогу уже его прокинуть в цикл с отправкой, как бы я мог выйти из этого порочного круга?
Там ты когда создаешь exchange, на самом деле ты создаешь RobustExchange и в него посетится новый конект после успешного реконекта. Объект при этом останется тот-же
Patsy
Ну типа того
Мое почтение! Очень полезная и по сути единственная aссинхронная библиотека для кролика
Dmitry
Patsy
Там ты когда создаешь exchange, на самом деле ты создаешь RobustExchange и в него посетится новый конект после успешного реконекта. Объект при этом останется тот-же
да, там я видел подмену классов в зависимости от коннекта
но тогда такой вопрос, может я изначально не правильно готовлю.
когда я хочу отправить сообщение, то обменник я получаю таким образом (по сути каждый раз запрашиваю у канала)
async def get_exchange_async(self) -> Exchange:
if not self._exchange:
channel = await self.get_channel_async()
if self.rabbitmq_exchange_type:
self._exchange = await channel.get_exchange(self.rabbitmq_exchange_type)
else:
self._exchange = channel.default_exchange
return self._exchange
но ведь канал каждый раз создается новый и мне нужно при реконнекте получается пересоздать канал? я правильным путем иду?
или можно/нужно один раз создать обменник и внутри него во время реконнекта канал подменится на нужный (новый)?
Dmitry
Patsy
попробуй запустить под отладчиком и посмотреть, что в переменной лежит во время выполнения. может быть, у тебя в label_with_image объект не создался
Anonymous
Ребята, помогите кто-нибудь чем-нибудь, пожалуйста. Долго уже мучаюсь
У меня траблы с отображением формы. В qt designer все аккуратненько, красиво, а в pycharm вот что
Anonymous
Ага, фото нельзя отправить
Anonymous
А в Pycharm всё плохо. Окно меньше, чем нужно, текст в окне не весь отображается
ㅤ
Всем привет, подскажите как разархивировать «.zip» файл через python код, выдаёт ошибку везде «Файл не найден», заранее спасибо 😉
Alexander
Alexander
ㅤ
ㅤ
Alexander
Указывай путь с помощью
os.path
чтобы наверняка
Vladimir
привет, наверное так работает cryptsetup, не поддерживает интерактивный ввод? может попробовать без sudo?
ㅤ
Всем привет, как решить ошибку? Не могу понять:
AttributeError: partially initialized module 'pyautogui' has no attribute 'screenshot' (most likely due to a circular import)
Null
get_ip может возвращать не одно значение?
ㅤ
А я как делал по твоему? :)
ㅤ
Я просто переименовал файл, и заработало
Shieldy
(10 + 9) @torrentxok, пожалуйста, отправьте решение указанной арифметической задачи в этот чат в течение указанного времени, иначе вы будете кикнуты. Спасибо! (20 сек)
При поддержке 1inch Network
Денис
Кто сталкивался с этой ошибкой?
PermissionError: [WinError 32] Процесс не может получить доступ к файлу, так как этот файл занят другим процессом: 'C:\\Users\\denis\\AppData\\Local\\Temp\\tmpi1vg5xjv'
Как вы ее решили? (раньше такого не было)
Alexey
Денис
Денис
У меня виндувс, обычный ехобот
Денис
Без консоли
Alexey
Денис
Sublime text ctrl+b
Денис
Не получилось
Денис
Та самая ошибка
Денис
у многих она есть, но чтобы решить нету
Иван
Иван
Скорее всего твоя же программа висит в фоне с правами на запись и не дает открыть файл
Денис
Денис
Когда запускаю
Денис
эти же проги выскакивают и закрываются и ошибка та
Иван
Не запуская свой скрипт поищи процесс использующий этот файл и убей его
Денис
я себя убить уже хочук
Иван
Перезагрузи компьютер
Денис
Денис
Денис
мне просто интиресно, почему раньше такого не было, а сейчас БАЦ!
Денис
Андрей
1$ вот это ты щедрый