Tishka17
немного другое но все же
Проксимов
Андрей
неужто алмбик не умеет этого
умеет я недавно в скулайт через алембик впиливал енумы
Андрей
Tishka17
sqlite наверняка не умеет енумы
Tishka17
обычный енум и native_enum=False
Tishka17
не постгресовый
Андрей
а куда я их прикручивал?
Tishka17
блин, я выше цитировал доку
Tishka17
два режима есть
Tishka17
1. нативные енумы для тех БД, где они естье 2. строка и констрейнт
Андрей
обычный енум и native_enum=False
а обычный енум нужно же обернуть в тип алхимии
Tishka17
да блин
Tishka17
алхимийный бычный енум
Tishka17
не постгресовый
Tishka17
и native_enum=False
Tishka17
в качестве параметра ему
Tishka17
field = Enum(YourEnum, native_enum=False)
Tishka17
типа того
Андрей
NameError: name 'gino' is not defined def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column('g_user', sa.Column('user_role', gino.schema.Enum('project_manager', 'account_manager', 'teamlead', 'deleivery_manager', name='userrole'), nullable=True)) # ### end Alembic commands ### Добавляю import gino Снова запускаю миграции получаю AttributeError: module 'gino.schema' has no attribute 'Enum'
Tishka17
куда дел его?
Tishka17
код в самом начале который был
Артём
Он postgresql.Enum заменил на gino.schema.Enum
Андрей
сейчас впилю алхимийный только разницы не будет. Gino враппер над кор алхимией
Артём
блин, как вы делаете, чтобы строка не переносилась при обёртывании тройным апострофом??
Kel0
парни есть сервис по типу старого freegeoip.net/json??
Андрей
парни есть сервис по типу старого freegeoip.net/json??
Есть Я пользовался каким-то Но не помню уже как он называется ;(
Андрей
Гугли
Андрей
Я Гуглом нашел
Kel0
блен
Kel0
окей
Unknown
Всем привет! Вопрос по asyncio и aiohttp. Суть: есть handler на route в приложении, в этом handler'е нужно выполнить операции: 1. обратиться в redis и достать оттуда значение; 2. сделать get запрос на сторонний ресурс и взять оттуда данные; 3. сделать запрос в бд и достать оттуда объект. Операции на зависят друг от друга, под них описаны корутины, которые Возвращают что-то: 1. из корутины redis'а -> str; 2. из корутины get'а -> dict; 3. из корутины бд -> MyDataType. Вопрос: как я понимаю, запуск вида redis_res = await redis_coro() get_json = await get_coro() db_val = await db.get() запустятся одна после другой. Есть ли возможность их запустить в один момент времени?
Артём
не волнуйся, так как это асинхронные корутины, они будут запускаться с задержкой примерно в 0,001 сек. думаю это не так критично.
Tigran
в документации asyncio даже написано, как
Андрей
И как?
Никак Меня отвлекли на работе. А ща уже домой топаю. Отложу до понедельника.
Tishka17
эх
Артём
в этом смысл корутин, если я всё правильно понимаю.)
Unknown
в документации asyncio даже написано, как
использовать gather? как тогда достать оттуда значение, а точнее три? можно, пожалуйста, ткнуть носом?
Unknown
в этом смысл корутин, если я всё правильно понимаю.)
Как я понял, суть в том, что они не блокируют ход выполнения. Те, если ты указал, что тебе нужно запустить пару штук (используя gather) они будут выполняться конкурентно. Но, если ты одну корутину вызываешь после другой, как у меня в примере, то они будут выполняться последовательно, НО КОНКУРЕНТНО С ДРУГИМИ, УЖЕ ЗАПУЩЕННЫМИ. Поправьте, если неправильный ход мыслей
Артём
"Но, если ты одну корутину вызываешь после другой, как у меня в примере, то они будут выполняться последовательно, НО КОНКУРЕНТНО С ДРУГИМИ, УЖЕ ЗАПУЩЕННЫМИ." - Да.
Unknown
"Но, если ты одну корутину вызываешь после другой, как у меня в примере, то они будут выполняться последовательно, НО КОНКУРЕНТНО С ДРУГИМИ, УЖЕ ЗАПУЩЕННЫМИ." - Да.
проверил async def coro_1(): await asyncio.sleep(1) print("coro 1") async def coro_2(): print("coro 2") async def main(): await coro_1() await coro_2() # await asyncio.gather(coro_1(), coro_2()) if __name__ == '__main__': import asyncio asyncio.run(main()) да, одна ждет другую, без использования gather. В связи с этим вопрос, как запустить их одновременно, может есть хак, не через gather? Как вытащить значения возвращенные корутинами, если они запущены через gather?
Артём
а вот тут надо кого-то другого спросить.) Когда у меня возникла такая проблема, я просто функцию, из которой мне нужен был return сделал не корутиной а обычной функцией.
Артём
как вариант - сделать обычную функцию, с обычным ретурном, внутри которой запускается корутина, например 🤷‍♂️ это то, на что хватило моих скудных познаний в этой области 😅
Unknown
Попросим @Saluev ткнуть нас в документацию и прошаримся )))
Дмитрий
в теории сработает грязный хак типа class A: async def coro1(self): self.a1 = await outer.coro1() async def coro2(self): self.a2 = await outer.coro2() async def start(self): asyncio.gather(self.coro1(), self.coro2())
Дмитрий
не совсем понял про gather, там нет ошибки? у self нет coro* )
я сам пока не запускал, это идеологически куда можно подумать. сейчас попробую у себя запустить
Misha
results - список с возращенными значениями
Vladyslav
https://docs.python.org/3/library/asyncio-task.html#asyncio.gather для кого доки пишут? If all awaitables are completed successfully, the result is an aggregate list of returned values. The order of result values corresponds to the order of awaitables in aws.
Unknown
https://docs.python.org/3/library/asyncio-task.html#asyncio.gather для кого доки пишут? If all awaitables are completed successfully, the result is an aggregate list of returned values. The order of result values corresponds to the order of awaitables in aws.
Спасибо, читал по диагонали видимо. Ну, в моем понимании, для этого и нужны группы типа этой. Ведь на все можно ответить "или учи матчасть"
Артём
https://docs.python.org/3/library/asyncio-task.html#asyncio.gather для кого доки пишут? If all awaitables are completed successfully, the result is an aggregate list of returned values. The order of result values corresponds to the order of awaitables in aws.
т.е. оно ломается, если например, одна из корутин уважаемого Unknown, которая полезла в сеть или на сервер - не получила своего значения?
Unknown
т.е. оно ломается, если например, одна из корутин уважаемого Unknown, которая полезла в сеть или на сервер - не получила своего значения?
Там есть параметры у gather, обеспечивающие корректное выполнение)) вот это я не пропустил)
Артём
хорошо. А то мне аж прямо за глаз зацепилось "if ALL awaitables completed successfully"
Sc
Ребят, как обфуцировать исполняемый файл ?
Alexander
Как Питон захватывает участок памяти при параллельной работе? Если у меня есть например такое: m=min(new, m) , во время всего вызова min() m заблокирована?
Alexander
Или только в момент чтения он ее блокирует?
Алексей
Чего?
Aragaer
предположу, что он никак ничего не блокирует
Aragaer
но если ты во время выполнения min из другого потока попытаешься этот m ковырнуть, будь готов к неожиданным результатам
Wqw
У кого-нибудь возникала такая ошибка:from object_detection.protos import string_int_label_map_pb2 ImportError: cannot import name 'string_int_label_map_pb2'
Aragaer
ага
Je
Или только в момент чтения он ее блокирует?
никак не блокирует, gil не защищает пользовательские данные, только внутренние структуры рантайма, поэтому используй явную блокировку
Ilya
Как Питон захватывает участок памяти при параллельной работе? Если у меня есть например такое: m=min(new, m) , во время всего вызова min() m заблокирована?
Как бы это переменная .... ммм... Во фрейме выполнения текущей функции. Они разные для разных потоков. Поэтому у каждого потока эта переменная своя. Вот если это -- переменная модуля, --- тут другое, тут уже надо защищать.
Aragaer
ну да, это предполагалось
Aragaer
что у кого-то "извне" есть доступ вот именно к этому m