Size: a a a

2020 December 25

S

Stan in PiterPy Meetup
moonz
Всем доброе утро и с наступающим. Подскажите пожалуйста (я ещё джун), есть ли какой-то альтернативный метод исполнения блока кода (вне зависимости от того как отработала программа), аналог блока finally. Я пробовал использовать контекстные менеджер, но мне нужно определить его внутри класса, а вне контекста он не работает, то есть мне нужен механизм аналогичный yield, но не генератор. Речь идёт о работе с selenium. Дело в том что он крайне капризный на винде, и его требуется принудительно закрывать всякий раз, вне зависимости от успеха, а если поймал исключение так и вовсе. В противном случае он начинает разлагаться в оперативной памяти, и забивать процессы. Буду крайне признателен за любую подсказку 🥰
try:
 do_smth_dangerous()
except Exception:
 process_failure()

?
источник

KP

Kirill Penzin in PiterPy Meetup
Dima Boger
как?
источник

KP

Kirill Penzin in PiterPy Meetup
насколько я вижу, в 5-ке это поведение сохранено
источник

DB

Dima Boger in PiterPy Meetup
per worker per instance
источник

DB

Dima Boger in PiterPy Meetup
видимо про это речь

в celery нельзя сказать "хочу чтобы эта таска выполнялась не чаще чем раз в минуту" на уровне таски
источник

DB

Dima Boger in PiterPy Meetup
единственное что можно сказать это "хочу чтобы эта таска выполнялась не чаще чем раз в минуту на этом воркере" 🌝

что по-моему довольно бесполезная фича
источник

KP

Kirill Penzin in PiterPy Meetup
Ну, тут ведь как. Если таска ограничена своей очередью, то всё работает отлично.
источник

Б

Боброний in PiterPy Meetup
Stan
try:
 do_smth_dangerous()
except Exception:
 process_failure()

?
Нет исключения — не отработает
Вылетело BaseException — не отработает
источник

Б

Боброний in PiterPy Meetup
moonz
Всем доброе утро и с наступающим. Подскажите пожалуйста (я ещё джун), есть ли какой-то альтернативный метод исполнения блока кода (вне зависимости от того как отработала программа), аналог блока finally. Я пробовал использовать контекстные менеджер, но мне нужно определить его внутри класса, а вне контекста он не работает, то есть мне нужен механизм аналогичный yield, но не генератор. Речь идёт о работе с selenium. Дело в том что он крайне капризный на винде, и его требуется принудительно закрывать всякий раз, вне зависимости от успеха, а если поймал исключение так и вовсе. В противном случае он начинает разлагаться в оперативной памяти, и забивать процессы. Буду крайне признателен за любую подсказку 🥰
Кажется, что у тебя неправильное понимание контекстного менеджера, либо я не понял твой кейс
источник

Б

Боброний in PiterPy Meetup
Чем не подходит finally?
источник

m

moonz in PiterPy Meetup
Боброний
Чем не подходит finally?
Подходит, мой вопрос был в том, есть ли аналогичные подходы. Контекстный менеджер мне не подходит по причине необходимости передавать контроль другим функциям
источник

Б

Боброний in PiterPy Meetup
moonz
Подходит, мой вопрос был в том, есть ли аналогичные подходы. Контекстный менеджер мне не подходит по причине необходимости передавать контроль другим функциям
Любопытно, а почему нельзя передавать контроль другим функциям?
источник

m

moonz in PiterPy Meetup
Боброний
Любопытно, а почему нельзя передавать контроль другим функциям?
потому что при выходе из контекста срабатывает логика закрытия веб драйвера, которую я описал. Селениум копризный на винде, его нужно постоянно контролировать, и принудительно убивать процесс в случае его краша
источник

Б

Боброний in PiterPy Meetup
moonz
потому что при выходе из контекста срабатывает логика закрытия веб драйвера, которую я описал. Селениум копризный на винде, его нужно постоянно контролировать, и принудительно убивать процесс в случае его краша
Странно как-то. Даже не представляю сразу как и зачем оно так может работать
источник

m

moonz in PiterPy Meetup
Могу показать реализацию с контекстным менеджером, что бы было яснее. Она работает, просто не удобно
источник

Б

Боброний in PiterPy Meetup
Теперь вообще ничего не понимаю
источник

Б

Боброний in PiterPy Meetup
moonz
Могу показать реализацию с контекстным менеджером, что бы было яснее. Она работает, просто не удобно
Давай
источник

m

moonz in PiterPy Meetup
источник

Б

Боброний in PiterPy Meetup
Всё ещё ничего не понимаю
источник

Б

Боброний in PiterPy Meetup
Что нужно сделать?
источник