
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

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

Alex
20.08.2018
09:16:14

Maxim
20.08.2018
09:17:16
Смотрел это
У меня без ETA задачи

Andrey
20.08.2018
09:17:55

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

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

Google

Maxim
20.08.2018
09:18:22

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

Maxim
20.08.2018
09:19:38
То есть заменить на аплиасинк

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 нужно заморачиваться с тем, чтобы он работал как контекст менеджер

Maxim
20.08.2018
09:35:26

Andrey
20.08.2018
09:36:37
да
асинк выкидывает задачу в бэграунд, а сам идет дальше работать
как только задача выполнится он продолжает работать дальше
с этой задачей
а тут ты задачу выкидываешь сразу в бэк
и не джешь ее выполнения

Maxim
20.08.2018
09:37:56