Я не эксперт Python, однако я пытаюсь разработать некоторые долговременные задачи, основанные на сельдерея, которые я могу получить доступ к их частичным результатам, а не ждать выполнения задач Конец.Доступ к частичным результатам задачи Celery
Как вы можете видеть в коде ниже, учитывая множитель, начальный и конечный диапазон, работник создает список размеров final_range - initial_range + 1.
from celery import Celery
app = Celery('trackers', backend='amqp', broker='amqp://')
@app.task
def worker(value, initial_range, final_range):
if initial_range < final_range
list_values = []
for index in range(initial_frame, final_frame + 1):
list_values.append(value * index)
return list_values
else
return None
Таким образом, вместо того, чтобы ждать всех четыре рабочих закончить, я хотел бы получить доступ к чтобы быть возвращаемые значения (list_values ), прежде чем они на самом деле вернулся.
from trackers import worker
res_1 = worker.delay(3, 10, 10000000)
res_2 = worker.delay(5, 01, 20000000)
res_3 = worker.delay(7, 20, 50000000)
res_4 = worker.delay(9, 55, 99999999)
Прежде всего, возможно ли это? Если да, то какие изменения мне нужно выполнить, чтобы заставить его работать?
Вы хотите получить доступ к res_1, не дожидаясь res_4, или вы хотите получить доступ к списку_значений до окончания работы? –
Я хочу получить доступ к списку_значений до окончания заданий –
Тогда вам понадобится источник правды, из которого вы можете сбросить значения и прочитать их. Если вы работаете на одной машине, это может быть так же просто, как создание глобальных структур данных, к которым могут обращаться как рабочие, так и родительский процесс (хотя это, как правило, не очень хорошая идея - получение многопоточного доступа к глобальным правым является очень сложным). Лучшим решением является использование внешнего источника правды, такого как база данных. Я использовал redis для таких вещей: рабочие добавляют значения в структуру данных, родительский читает их, а redis обрабатывает проблемы с потоками и доступом. –