@ru_python

Страница 6270 из 9768
Maxim
20.08.2018
09:09:00
Есть задача обращения к апи внешнему, получаю результат от него, сохраняю, эта задача может выполнится несколько раз почему то, что не допусьимо

Alex
20.08.2018
09:10:50
Что используешь в качестве брокера?

Maxim
20.08.2018
09:11:06
Redis

Google
Andrey
20.08.2018
09:11:25
а используешь celery ?

Maxim
20.08.2018
09:11:32
Очень важно просто, что бы только один раз она запустилась

Andrey
20.08.2018
09:11:58
celery beat

?

Maxim
20.08.2018
09:12:11
Andrey
20.08.2018
09:12:19
хм

Maxim
20.08.2018
09:12:26
Именно надо только что бы одним воркером она запустилась

И один раз, по внешнему событию

Andrey
20.08.2018
09:12:49
а сколько воркеров запущено одновременно?

Maxim
20.08.2018
09:12:57
4

И с одним пробова

Andrey
20.08.2018
09:13:18
те одну и туде задачу подхватывают 1+ воркера?

Google
Maxim
20.08.2018
09:13:21
Временами все норм, временами несколько раз выпоняется

Но не всегда

Andrey
20.08.2018
09:13:41
а 1 если воркер запустить?

Maxim
20.08.2018
09:14:01
То же самое

Что параметр bind значит?

Andrey
20.08.2018
09:14:20
а задаача выполняется каждый раз корректно?

Maxim
20.08.2018
09:14:26
Не могу понять, из доков

а задаача выполняется каждый раз корректно?
Вот именно, надо что бы в любом случае, даже если не корректно выполнялась она больше не выполнялась

Там запросы к внешнему сервису идут

И иногда получаются повторные списания

Andrey
20.08.2018
09:15:32
попробуй тогда ее закинуть в асинк

Maxim
20.08.2018
09:15:55
попробуй тогда ее закинуть в асинк
Смотри, а в чем разница, я как delay запускаю

Andrey
20.08.2018
09:16:00
и таким образом таска всегда будет завешаться корретно

Alex
20.08.2018
09:16:14
Временами все норм, временами несколько раз выпоняется
возможно это будет релеватно https://github.com/celery/celery/issues/4400

Maxim
20.08.2018
09:17:16
Смотрел это

У меня без ETA задачи

Andrey
20.08.2018
09:17:55
Смотри, а в чем разница, я как delay запускаю
закидываешь в беграунд задачу

Maxim
20.08.2018
09:18:03
Просто асинхронный запрос к апи делаю, получаю результат, но иногда этот запрос несколько раз желается

Andrey
20.08.2018
09:18:07
типа не дожидаешься когда она выполниться

Google
Andrey
20.08.2018
09:18:46
эм типа как через nohup в linux запускаешь

те задачу начинает выполняться

Maxim
20.08.2018
09:19:05
Не дожидаюсь
Запускаю, и код дальше идет

Да а задача сама по себе выполняеися

Andrey
20.08.2018
09:19:16
Чтобы воспользоваться фоновым обработчиком, необходимо использовать метод .delay. При помощи этого метода мы передаем выполнение функции обработчику celery и функция должна сразу же вернуть нас в консоль без каких-либо задержек:

вот зачем delay

Andrey
20.08.2018
09:19:57
ну просто видать где-то у тебя рубится задача

вылетает ексепшен и из очереди задача не удаляется и выполняется еще раз пока

Maxim
20.08.2018
09:20:29
ну просто видать где-то у тебя рубится задача
Возможно, там много вариантов, но если она рубится, мне ее заново не надо поднимать вот чем проблемма

Как быть?))))

Andrey
20.08.2018
09:20:56
бо попробуй всю функцию в обработчик ошибок закинуть )

для проверки

и логируй ошибки

Maxim
20.08.2018
09:21:28
То есть ловлю исключение, если есть то просто задача завершается

Andrey
20.08.2018
09:21:51
ловишь исключение, скрипт не падает

записывай лог

Google
Andrey
20.08.2018
09:22:35
либо в асинк засунь там тоже она падает и фиг с ней)

Maxim
20.08.2018
09:22:57
ловишь исключение, скрипт не падает
И задача завершается? Мне не важно что бы она всегда успешно выполнялась, если упала фиг с ней, он по другому пути пойдет обрабатываться,

Andrey
20.08.2018
09:23:09
смотря где поставишь

ставь на входе и выходе метода выполнения

Maxim
20.08.2018
09:23:19
На весь так?

Так?

Блин

Andrey
20.08.2018
09:23:27
либо где все вызываешь

Maxim
20.08.2018
09:23:28
Таск

А что bind=true значит?

Andrey
20.08.2018
09:23:54
где вызывается задача на выполнение

Maxim
20.08.2018
09:24:16
Она вызвалась и дальше код пошел

Andrey
20.08.2018
09:24:42
точнее

где весь воркер выполняется

Maxim
20.08.2018
09:25:05
Джанго

Есть вью

В нем так вызыаается

После его вызова дальше функции выполняются

Результат таска в чат падает, через апи

Google
Maxim
20.08.2018
09:27:25
В таске только общение с внешним апи идет

Есть разница между delay и applyasync? Что параметр bind даёт (если не использовать вместе с авто поднятием упавших задач)

BlackAndOrange
20.08.2018
09:32:59
mock_open это подстава какая-то

По нему итерироваться нельзя

Причём он даже не падает, а просто молча выдаёт ничего

Aragaer
20.08.2018
09:33:36
гм

ты сделай bytesio, а потом у open в return_value его отдавай

и будет счастье

ну или stringio

BlackAndOrange
20.08.2018
09:34:07
У mock_open нет return_value же

А простой mock нужно заморачиваться с тем, чтобы он работал как контекст менеджер

Andrey
20.08.2018
09:36:37
да

асинк выкидывает задачу в бэграунд, а сам идет дальше работать

как только задача выполнится он продолжает работать дальше

с этой задачей

а тут ты задачу выкидываешь сразу в бэк

и не джешь ее выполнения

Maxim
20.08.2018
09:37:56
с этой задачей
То есть скрипт в этом месте будет зависать?

Страница 6270 из 9768