#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 все еще не работает… Извините, я не понимаю, что означает «передать их вашим подписям». Можете ли вы привести мне простой пример?