Aragaer
то есть нельзя удалить более молодую запись, если более древнюю держит какой-то ридер
Aragaer
хотя я подумаю над этим
Denis
Потому что он ее сейчас обрабатывает
Aragaer
ну вот сейчас моя позиция это "если захвачено, то это явно ошибка в алгоритме, поэтому так дальше жить нельзя, эксепшн и досвиданья"
Denis
В смысле? Он же не моментально отрабатывает
Denis
Он захватил и заснул, в это время новое добавилось
Aragaer
в смысле "у нас в буфере есть место под 100 записей. Если нашелся ридер, которому почему-то нужна аж 100-я, то это явно какой-то косяк в алгоритме"
Aragaer
и если не косяк, то надо увеличивать буфер
Denis
То есть ридер обязан отработать мгновенно?
Aragaer
100 записей приходят не сразу, а в определенном предсказуемом темпе
Aragaer
ридеры тоже должны работать в определенном предсказуемом темпе
Aragaer
то есть нагрузка должна быть ровной и равномерной (эмбеддед же), без пиков
Denis
Тогда это совсем другая задача
Denis
Я думал, что лок фри надо
Aragaer
ок. Попробую переформулировать. Есть один или несколько райтеров, каждый из которых со стабильным темпом кладет записи в буфер. Соответственно можно сразу сказать, какое время записи в буфере живут - размер буфера делим на скорость появления новых записей.
Denis
Тогда просто выбираем первую подходящую запись и читаем ее
Aragaer
каждый ридер независимо от других обращается к разным записям, как правило относительно текущего таймстемпа, но не всегда им нужна самая последняя запись - некоторым (алгоритм такой) нужны в том числе и более старые
Denis
Он может несколько посмотреть?
Aragaer
то есть "дайте мне запись свежее таймстемпа 100500" и "дайте мне запись из интервала 100400-100450"
Aragaer
может
Denis
Ну вот, пусть начнет с самой ранней и идет вперед
Aragaer
то есть если ему очень сильно надо, он может к себе утянуть (скопировать) запись, чтобы все стало легче. Но копирования хочется избежать
Aragaer
то есть он инплейс смотрит запись, что-то у себя считает и так далее
Aragaer
как именно он это делает - вопрос ридера, ридеры могут быть разными, но каждый должен (ожидается) успевать на текущем буфере отрабатывать с учетом нагрузки системы
Aragaer
соответственно ситуация, когда оказывается, что запись, которую райтер должен быть переиспользовать, а она прям щас захвачена каким-то ридером, я воспринимаю как "ну блин, не успели"
Aragaer
нагрузка оказалась выше расчетной, ридер не успел отработать, что-то еще.
Aragaer
фишка с тем, что ридер может прийти с запросом "хочу запись от таймстемпа 123456", а система видит, что такой записи _еще_ нет, поэтому ридер блочится -- это так, бонус.
Denis
Ну пусть в спинвейте крутится
Aragaer
кондвар можно, не проблема
Апач
Есть такая фича в питоне чтобы последнее выражение в методе было возвращаемым значением?
Denis
Нет
Vladislav
Привет, а никто не знает "hacky" способ чтобы сделать сделать асинхронные функции (сопрограммы) само-awaitable ? (т.е. чтобы не нужно было каждый раз дописывать слово await) (с этим постоянно проблемы)
Vladislav
А зачем тогда вообще асинк?
чтобы не ждать ответа от сервера - быстрее
Fᴏʀᴅᴇɴ
эх, если бы придумали асинхронный по дефолту язык..
Апач
эрланг?
Denis
чтобы не ждать ответа от сервера - быстрее
Ты ж его синхронно хочешь запустить
Vladislav
(хочу именно в проект на aiohttp впихнуть) (знаю что есть greenlet, но уже есть готовый код)
Апач
эрланг - модель акторов, она ассинхронна по дефолту
Vladislav
да, но сделать сущность, которая без await бы возвращала данные из сопрограммы
Vladislav
что-то по типу asyncio.run, только для каждой корутины
Vladislav
http://zderadicka.eu/functional-fun-with-asyncio-and-monads/
спасибо большое, сейчас посмотрю
Апач
монадическая семантика с мапом и флатмапом скорее всего что ты хочешь
Апач
тебе await нужно будет только в самом конце, няп что там написано
Vladislav
понял, спасибо. Какой-никакой - выход, но еще не уверен что это подойдет
Anonymous
может ли кто нибудь объяснить новичку - что есть что на конкретном примере
Anonymous
спсибо
Fᴏʀᴅᴇɴ
привет есть какая то реализация TTL в питоне?
Fᴏʀᴅᴇɴ
шта?
ну редиску знаешь?
Alex
ну редиску знаешь?
> есть какая то реализация TTL в питоне? и как это следует из твоего вопроса?
Fᴏʀᴅᴇɴ
там можно каждому ключу присвоить некий TTL, после которого он удалится сам, без контроля от меня
Fᴏʀᴅᴇɴ
вот аналог такой в питоне, чтобы не было сетевого лага
Alex
окей, тебе нужен in-memory cache с TTL
Fᴏʀᴅᴇɴ
да, криво сформулировал вопрос)
Alex
так бы сразу и сказал
Alex
да полно их
Alex
считай выше фраза по которой гуглить
Fᴏʀᴅᴇɴ
мда
Egor
Привет. Подскажите Best Practice для получения параметров из командной строки в Python. Написал ф-ию для их получения с обработкой возможных ошибок (👆) Насколько адекватно использовать такой helper? P.S. Не серчайте, если что, только-только изучаю Python
Tigran
argparse же
Alex
выбирай любой по вкучу и еще вагон и маленькая тележка других
Alex
кстати argparse - говно, но есть в стдлибе
Tigran
абсолютли
Egor
Так и думал, что что-то есть, но не нагуглилось. Спасибо, комрады
Tigran
айроникалли, в го тоже есть встроенный модуль для этого, и он тоже хуёвый
Aragaer
мне норм, потому что не надо разбираться со всеми остальными
Anonymous
да полно их
Например. И с сабскрайбами чтобы
Alex
почему говно?)
например потому что для аргумента --myfunnyarg сработают так же --my, --myfun ну и т.д., ты понял.