Я думаю, что было бы полезно сослаться на ответ, объясняющий это тоже. Это о boost::compressed_pair
на Логан Капальдо .
Итак, я оглянулся и думаю, что проблема в том, что я применяю неправильную стратегию для того, что я хочу сделать. Я хочу запустить N задач, а затем сообщить, работали они или нет. Тем не менее, каждая подзадача уже сообщает о своем состоянии в базу данных и поэтому ожидает проверки, которая просто удерживает вызывающего работника заблокированным без всякой цели.
Я изменил функцию следующим образом:
job = group(tasks) if len(tasks) == 1 else group(*tasks)
job.apply_async()
И это все. Задачи запускаются, и вызывающая функция завершается, освобождая работника. Подзадачи выполняются как обычно, и я не получаю ошибки. То, что я пытался сделать, имеет смысл, только если я пытаюсь сделать звонок, который зависит от получения результатов каждой подзадачи.