Dauren
объявить декоратор?
Дмитрий
тебе надо как-то прокинуть объект приложения в твой new.py. или городить циклические импорты или сделать как праивльно
Дмитрий
то есть блюпринтами
Dauren
спасибо, сейчас попробую
Дмитрий
Каким образом не используя сторонних библиотек() можно запустить функцию как бекграунд таску?
Дмитрий
Вот например у меня есть функция которая что-то делает в бесконечном цикле
Дмитрий
трединг, мультипроцессинг
а через async это никак?
deniallugo.eth
Дмитрий
можно через асинк в теории
Дмитрий
asyncio.create_task()
async def worker_queue(): while True: print(que.get()) time.sleep(1) loop = asyncio.new_event_loop() loop.create_task(worker_queue()) Если я так делаю, то функция даже не исполняется, а если добавить loop.run_forever() то на этом тред блокируется
Дмитрий
А можно как-нибудь сделать запуск но такой чтобы он не блокировал текущий тред?
Дмитрий
А можно как-нибудь сделать запуск но такой чтобы он не блокировал текущий тред?
как ты себе это представляешь? чтобы так работало, надо или чтоб ивентлуп был в отдельном треде, или чтоб весь код был асинъронным (с asyncio.sleep вместо time.sleep)
deniallugo.eth
и вообще зачем он там тебе?
Kirill
В примере выше я так и сделал
Вот бы ты ещё "таску" сделал асинхронной - тогда бы она не "блокировала" "основной поток". Ну и конечно же "основной поток" тоже должен быть асинхронным. Иначе путь тебе в мульти-трединг или -процессинг
Іван 🤙
Привет! Ребят подскажите плиз , нужно через редис организовать очередь задач, но с одним условием: необходима очередь из пачек задач пример: задачи приходят и ложатся в очередь когда набирается 10 шт - кидаем уведомление и отправляем эти задачи батчем можно ли это организовать на стороне редиса? или необходимо писать логику на питоне что бы проверять сколько задач зашло в очередь???
Tishka17
о. прикольно. у меня похожая задача на SQS
Kirill
Почему бы не складировать свои задачки куда-то отдельно от очереди, и как только их там станет 10 - посылать их в очередь все в виде одного сообщения
Іван 🤙
но там еще такая тема, если проходит больше 3хсек после захода каждой из задачи - тоже отправлять независимо орт размера батча
Pavel
ну сделай вотчдог, который смотрит в очередь и на таймер
Tishka17
ну сделай вотчдог, который смотрит в очередь и на таймер
а как быть если у тебя несколько воркеров?
Pavel
а как быть если у тебя несколько воркеров?
то есть тебе надо не только накопить батч и решить, что "пора", но и решить "кому" это скормить?
Tishka17
угу
Alexander
Raft прикрути
Pavel
это, кажется, не из этой оперы немного
Tishka17
Raft прикрути
вот смотрю на картинку рафта. А оно будет работать когда половина воркеров упадет?
Tishka17
и да, у меня воркеры в разных ДЦ, между ними связи нет кроме как через очередь и БД
Tishka17
а. это просто выбор ведущего типа?
Alexander
Да
Alexander
А ведущий «распределяет» задачи по воркерам
Alexander
Каким образом - зависит от задачи
Alexander
и да, у меня воркеры в разных ДЦ, между ними связи нет кроме как через очередь и БД
Реализуй через базу обмен информацией о живучести воркеров, если нет другого варианта для связи
Tishka17
да мне в целом не нужно синхронизировать воркеров. Просто желательно батчи иметь, а не по одной записи таскать
Kirill
но там еще такая тема, если проходит больше 3хсек после захода каждой из задачи - тоже отправлять независимо орт размера батча
Задачки складируешь в базу, а в очередь раз в 3 секунды кидаешь месадж. Воркер ловит месадж и выгребает из базы все задачки, старше 3-ёх секунд и начинает выполнять их. Без распределённых локов конечно не получится, т.к. надо предотвратить возможность параллельной обработки одних и тех же задачек в разных воркерах.
Alexander
Либо с локами, да
Pavel
в терминах кролика тебе мог бы помочь самописный shovel, например
Alexander
Раз там SQS, наверняка там что-то у Амазона есть для синхронизации своё
Alexander
а в очередь нет возможности кидать сразу батч?
Ну он же может собираться долго или разными сервисами, из разных источников
Ilya
jinja сама по себе хорошо работает
Ок, спасибо понял. А где можно глянуть примеры каких-то простых схем, чтобы там квадратики нарисовать подписать их внутри, а то что-то не нахожу. И собирать надо как обычной код? Схемка откроется в новом окне что-то проде Matplotlib или как?
Kirill
а в очередь нет возможности кидать сразу батч?
Если очередь надёжная - можно и батч кидать. Правда есть кейс, что пока он дойдёт до воркера, то задачек в базе станет сильно больше.
Іван 🤙
Ну он же может собираться долго или разными сервисами, из разных источников
долго точно нет, раз в 3 сек будет отправляться независимо от наполнености батча
Іван 🤙
Кем отправляться?
всмысле воркер будет загребать батч раз в 3 сек либо же когда в батче будет 10 задач)
Іван 🤙
Тебе же сказали, что воркер не один
ну значит лочить нужно =\
Алексей ✡️
Питон учить лучше или ноду?
Alexander
ну значит лочить нужно =\
Тут уже обсудили, что нужно делать
Максим
Питон учить лучше или ноду?
паскаль же. в чате про питон другого ответа не дадут
Kirill
долго точно нет, раз в 3 сек будет отправляться независимо от наполнености батча
Под надёжностью очереди я имел ввиду, что она не просрёт задачу если воркер неожиданно упадёт, и "засунет" эту задачу в другой живой воркер Не знаю как с этим дела в очередях на базе Redis
Spirit
asm
asmr
Forevka ÐΞV
asmr
фу
Kirill
Если просто херачить условно "пустой" месадж раз в 3 секунды, а сами задачки будут лежать в базе и воркеры их будут от туда доставать, то будут не страшны "косяки" очереди и потеря сообщений в ней.
Pavel
SQS
не работал с ней, увы
Ilya
А кто работал или работает с jinja где можно посмотреть примеры схем с квадратиками там и тд А не примеры генирации конфигов и страниц :)
Ilya
С какими квадратиками?
Ну простейщая схема :) А -> B
Андрей
Яннп
Дмитрий
каких схем?
Ivan
зачем тебе схема?
Дмитрий
описание языка jinja в виде формальной грамматики?
Ilya
зачем тебе схема?
если очень по простому, отобразить замену двух свичей одним и порты показать какие куда
Ilya
Джинджа просто хтмл рисует из твоих данных
это я уже понял, мне бы что-то за основу взять Чтобы иметь представление что и как
Андрей
Ну Тут скорее к фронтендерам