Сельдерей: как создавать задачи в пакетном режиме?

#python #rabbitmq #celery

#python #rabbitmq #сельдерей

Вопрос:

У меня есть большой цикл для создания задач:

 for i in range(1000):
    receiver.apply_async(args=(i), kwargs={}, exchange=topic_exchange, routing_key=topic_key)
  

И я обнаружил, что есть модуль celery.contrib.batches перед celery 3.X или celery_batches после celery 4.X. Но этот модуль, похоже, не поддерживает такие параметры. Итак, как я могу это сделать?

Я использую сельдерей 4.4.7 с rabbitmq.

Ответ №1:

Если под «пакетом» вы подразумеваете небольшое подмножество (фрагмент) всех задач, то вы могли бы изучить фрагменты. Вместо использования фрагментов (в конце концов, они созданы для разных целей), я предлагаю вам использовать Chord, если вы заботитесь о результатах. Если вы этого не сделаете, то просто создайте группу. Тысячи задач — это ничто — у нас были аккорды / группы, состоящие из десятков тысяч задач, и Сельдерей довольно хорошо справляется с этой нагрузкой.

Комментарии:

1. Как насчет kwargs , exchange и routing_key ? Думаю, сначала мне нужно разбить задачи на routing_key части, это не так сложно, но мои kwargs различны для каждой задачи … или я должен преобразовать kwargs в args?

2. Вы можете передать их своим подписям.

3. Я пытался receiver.chunks(zip(range(1000)), 100)(kwargs={something}, exchange=topic_exchange, routing_key=topic_key) , но kwargs все еще не работает… Извините, я не понимаю, что означает «передать их вашим подписям». Можете ли вы привести мне простой пример?