Tishka17
немного другое но все же
Tishka17
Проксимов
Андрей
Tishka17
sqlite наверняка не умеет енумы
Tishka17
обычный енум и native_enum=False
Андрей
Tishka17
не постгресовый
Андрей
а куда я их прикручивал?
Tishka17
блин, я выше цитировал доку
Tishka17
два режима есть
Tishka17
1. нативные енумы для тех БД, где они естье
2. строка и констрейнт
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'
Daniil
Tishka17
Tishka17
куда дел его?
Tishka17
код в самом начале который был
Артём
Он postgresql.Enum заменил на gino.schema.Enum
Андрей
сейчас впилю алхимийный
только разницы не будет. Gino враппер над кор алхимией
Артём
блин, как вы делаете, чтобы строка не переносилась при обёртывании тройным апострофом??
Андрей
Артём
Kel0
парни есть сервис по типу старого
freegeoip.net/json??
Андрей
Гугли
Андрей
Я Гуглом нашел
Kel0
блен
Kel0
окей
Tishka17
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
Артём
в этом смысл корутин, если я всё правильно понимаю.)
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
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())
Unknown
Misha
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
Unknown
Артём
Unknown
Артём
хорошо. А то мне аж прямо за глаз зацепилось "if ALL awaitables completed successfully"
Sc
Ребят, как обфуцировать исполняемый файл ?
Alexander
Как Питон захватывает участок памяти при параллельной работе?
Если у меня есть например такое:
m=min(new, m)
, во время всего вызова min() m заблокирована?
Alexander
Или только в момент чтения он ее блокирует?
Алексей
Чего?
Ilya
Aragaer
предположу, что он никак ничего не блокирует
Alexander
Alexander
Aragaer
но если ты во время выполнения min из другого потока попытаешься этот m ковырнуть, будь готов к неожиданным результатам
Alexander
Wqw
У кого-нибудь возникала такая ошибка:from object_detection.protos import string_int_label_map_pb2
ImportError: cannot import name 'string_int_label_map_pb2'
Aragaer
ага
Aragaer
ну да, это предполагалось
Aragaer
что у кого-то "извне" есть доступ вот именно к этому m