Аккорд сельдерея, выполнение кода после обратного вызоваPython

Программы на Python
Ответить
Anonymous
 Аккорд сельдерея, выполнение кода после обратного вызова

Сообщение Anonymous »

Я работаю над приложением Django, которое использует задачи сельдерея для сложных и трудоемких вычислений.
У меня есть задача, в которой подзадачи используются для обработки большого количества комбинаций значений и определения наилучшей комбинации на основе предопределенные параметры. Подзадачи создаются следующим образом:

Код: Выделить всё

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
оба отмечены @shared_task(). поэтому я нахожу лучший результат в каждом фрагменте (это отлично работает, основываясь на том, что я вижу в консоли), а затем сравниваю их, чтобы найти лучший результат из всех фрагментов.
Моя проблема в том, что я хочу взять это best_result, сделайте что-нибудь с ним, а затем верните его родительской задаче. но я не могу запустить код после best_result = chord... потому что выполнение кода не ждет завершения всех задач и обратного вызова аккорда, я не могу найти решение этой проблемы, поэтому любая помощь будет очень признательна .
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... r-callback
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»