У меня есть задача, в которой подзадачи используются для обработки большого количества комбинаций значений и определения наилучшей комбинации на основе предопределенные параметры. Подзадачи создаются следующим образом:
Код: Выделить всё
combinations = itertools.product(*bm)
# setup for multicore processing using celery tasks
static_args = (nt, mp, f, levels)
chunk_size = 10000
tasks = _chunked(combinations, chunk_size)
chunk_tasks = group(evaluate_combination_chunk.s(list(chunk), static_args) for chunk in tasks)
final_task = compare_chunk_results.s()
best_result = chord(chunk_tasks)(final_task)
# do some stuff with this result
return best_result
Код: Выделить всё
def evaluate_combination_chunk(chunk, static_args):
# evaluate a chunk of combinations
best_result = None
highest_power = -1
for comb in chunk:
result = evaluate_combination(comb, *static_args)
if result[0] and result[1] > highest_power:
best_result = result
highest_power = result[1]
return best_result
Код: Выделить всё
def compare_chunk_results(results):
best_result = None
highest_power = -1
for result in results:
if result:
if result[1] > highest_power:
best_result = result
highest_power = result[1]
return best_result
Моя проблема в том, что я хочу взять это best_result, сделайте что-нибудь с ним, а затем верните его родительской задаче. но я не могу запустить код после best_result = chord... потому что выполнение кода не ждет завершения всех задач и обратного вызова аккорда, я не могу найти решение этой проблемы, поэтому любая помощь будет очень признательна .
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... r-callback
Мобильная версия