У меня есть довольно стандартная установка Django+Rabbitmq+Celery с 1 задачей Сельдерея и 5 рабочими.
Задача загружает то же (я упрощаю немного), большой файл (~100MB) асинхронно ко многим удаленным ПК.
Все хорошо работает за счет использования большой памяти, начиная с каждой загрузки задачи/рабочего что большой файл в память отдельно.
То, что я хотел бы сделать, должно иметь некоторый кэш, доступный для всех задач, т.е. загрузить файл только однажды. Django, кэширующийся на основе locmem, был бы прекрасен, но как документация говорит: "каждый процесс будет иметь свой собственный частный экземпляр кэша", и мне нужен этот кэш, доступный для всех рабочих.
Попробованный для проигрывания с Сельдереем сигнализирует как описанный в № 2129820, но это не то, в чем я нуждаюсь.
Таким образом, вопрос: есть ли способ, которым я могу определить что-то глобальное в Сельдерее (как класс на основе dict, где я мог загрузить файл или что-то). Или есть ли прием Django, который я мог использовать в этой ситуации?
Спасибо.
Мне кажется, что вам нужно использовать memcached для django. Таким образом, каждая задача в Celery будет иметь к нему доступ.