Избранное
sqlite3
Избранное
внимание ушло на коды)
Dmytro
юзай лучше постгрес/мускул/монгу, чем это говно
Избранное
Проксимов
Mikhail
Tishka17
Tishka17
вот я прям даже не знаю, советовать монгу ещё при этом
Dmytro
а чо с монгой не так?
Tishka17
очень специфическая БД
Tishka17
Документоориентированная БД мало кому подходит
Kop
Ещё и борьба с ошибками, то ещё
Dmytro
Tishka17
Tishka17
И зачем это вообще
Kirill
Из ORM есть Mongoengine - вполне юзабельно. Форк-сафети делается легко - один аргумент включающий ленивое создание конекта.
Хотя конечно сам выбор Монги должен быть сильно обоснован
Kirill
И зачем это вообще
Если создать конект до того как процесс будет форкнут, то оба процесса будут юзать один конект, что не есть хорошо.
Tishka17
Kirill
А часто ты думаешь о том что делаешь в коде в плане форк-сафети? Вот у тебя в какой момент создаются конекты к базам, или например файлы открываешь и держишь их открытыми? Или какие-то там мьютексы может создаёшь?
Tishka17
Я вообще редко форкаюсь в процессе работы
Tishka17
Обычно заранее создаю нужное число процессов и дальше каждый живёт своей жизнью
Kirill
Ну вот если ты используешь какой-нить uwsgi или другой веб-сервер с поддержкой пультипроцессинга, то у тебя уже есть форкинг по дефолту
Tishka17
Там форк до запуска твоего кода
Kirill
Есть конечно настройка - сначала создать процессы и потом в них запускать питонячий код. Но это дико медленно и памяти больше хавает
Tishka17
Он сначала форкается, а потом уже ты создаешь коннекншы и прочее
Tishka17
Хм. Gunicorn наоборот
Kirill
Проще обеспечить форк-сафети, чем мирится с тормозами на старте и потреблением памяти
Co(n)stantine👨🔬
Tishka17
Tishka17
Ну вообще если какой-то пул коннектов юзается, то он обычно при первом коннекте только заполняется
Tishka17
Так что да, форк сейф
Tishka17
В последний раз так делал, когда была адовая кодоненерация при старте
Co(n)stantine👨🔬
https://python.libhunt.com/compare-werkzeug-vs-gunicorn 🤔
Tishka17
Мне показали, что у кого-то много памяти и долгий старт если форк делать слишком раго. Я не замечал такого
Tishka17
Возможно особенность конкретного кода
Tishka17
Kirill
Зачем это делать после коннекта, вопрос в этом.
Не все знают про это. Я вот тоже не задумывался про то что "ресурсы" утекают из процеса при его форке. Но как-то понаблюдал за тем что у меня uwsgi назапускал, и удивился, откуда в мастер-процессе uwsgi висят какие-то левые треды. А это как раз оказались служебные треды, которые pymongo запускает. Вот тогда я и задумался про форк-сафети, и поправил инициализацию конекта к монге.
Вероятно есть другие конекторы к базам данных, у которых всё нормально с форк-сафети и с ними не надо про это думать.
Tishka17
Ну я просто инициализирую все после форка
Tishka17
В фабрике аппа
Tishka17
Хех
Kirill
В фабрике аппа
Ну если используется post-fork (как в uwsgi по дефолту), то тут надо уже фабрику-фабрики для аппа 😊
Ну или грамотно подложить соломку в тех местах, где может "поломаться"
Tishka17
Надо глянуть uwsgi, юзал всего раз
Kirill
При использовании WSGI фабрика как бы уже идёт из коробки - функция котороя создаёт app, и отдаёт его веб-серверу. При post-fork наличие этой фабрики само-собой не спасает.
Kirill
Я вот тоже сначала решил "хотфиксик" сделать - переключить uwsgi на pre-fork. Но быстро отказался, увидев как медленно обрабатываются новые запросы (т.к. для них запускаются новые форки с полной инициализацией приложения), и что память стало больше хавать. Проект у меня большой и сложный - на нём разницу сразу видно.
Tishka17
Tishka17
Форки должны запускаться один раз
Tishka17
При старте
Tishka17
дальше запросы обрабатываются уже запущенными процессами
Tishka17
Tishka17
это прям костыль для приложений у которых что-то течет
Tishka17
а
Tishka17
ты об этом
Tishka17
тогда не вижу причин почему должно стать меденнее
Tishka17
они все равно один раз запустятся и дальше все норм
Kirill
Ну так медленее обрабатываются вот такие "первые" запросы - они ждут пока под них запустится процесс.
Tishka17
ну у тебя же не все ноды разом переключаются на новую версию
Tishka17
ну да ладно. Если реально большой проект - я бы коечно руками делил то, что до форка и что после него вызывается. Причем по максимуму во второе все выносил, что юзает внение ресурсы
Kirill
А фиг знает как там uwsgi это всё балансит. Мне на моём проекте совсем не понравилось. Особенно с учётом того что у нас есть "харакири" и рестарт по числу обработанных реквестов - процессы могут перезапускаться уже после того как всё "разогналось"
Tishka17
а вот это уже странно
Tishka17
утечки так фиксили?
Kirill
Конечно 😊
Kirill
Самый простой способ забыть про утечки - рестарт через каждые 1000 запросов
Kirill
Ну а харакири - это от тяжёлых запросов. Лучше загасить процесс который обрабатывает запрос больше 30 секунд, чем завесить весь сервер.
Tishka17
а. это да
Max
привет, кто-то встречал:
Traceback (most recent call last):
File "/Users/max/Documents/univercity/diploma/code/scraper/hotline_spider/collect_proxy.py", line 5, in <module>
proxy = collector.get_proxy({'code': ('ua', 'ru', 'by'), 'anonymous': True})
File "/usr/local/lib/python3.7/site-packages/proxyscrape/proxyscrape.py", line 310, in get_proxy
self._refresh_resources(False)
File "/usr/local/lib/python3.7/site-packages/proxyscrape/proxyscrape.py", line 189, in _refresh_resources
refreshed, proxies = resource['proxy-resource'].refresh(force)
File "/usr/local/lib/python3.7/site-packages/proxyscrape/scrapers.py", line 85, in refresh
proxies = self._func()
File "/usr/local/lib/python3.7/site-packages/proxyscrape/scrapers.py", line 168, in get_proxy_daily_http_proxies
return _get_proxy_daily_proxies_parse_inner(centers[0], 'http', 'proxy-daily-http')
IndexError: list index out of range
не пойму в чём косяк и как лечить
Max
(proxyscrape) - всё по доке,..
deniallugo.eth
привет, кто-то встречал:
Traceback (most recent call last):
File "/Users/max/Documents/univercity/diploma/code/scraper/hotline_spider/collect_proxy.py", line 5, in <module>
proxy = collector.get_proxy({'code': ('ua', 'ru', 'by'), 'anonymous': True})
File "/usr/local/lib/python3.7/site-packages/proxyscrape/proxyscrape.py", line 310, in get_proxy
self._refresh_resources(False)
File "/usr/local/lib/python3.7/site-packages/proxyscrape/proxyscrape.py", line 189, in _refresh_resources
refreshed, proxies = resource['proxy-resource'].refresh(force)
File "/usr/local/lib/python3.7/site-packages/proxyscrape/scrapers.py", line 85, in refresh
proxies = self._func()
File "/usr/local/lib/python3.7/site-packages/proxyscrape/scrapers.py", line 168, in get_proxy_daily_http_proxies
return _get_proxy_daily_proxies_parse_inner(centers[0], 'http', 'proxy-daily-http')
IndexError: list index out of range
не пойму в чём косяк и как лечить
вангую, что массив centers пустой
Alex
Господа, нужна помощь с написание калькулятора, который сможет считать выражения со скобками и т.д
Mikhail
Андрей