Как сохранить результат длительного выполнения задания Celery в файле JSON, не блокируя мою конечную точку REST на Flask? - PullRequest
2 голосов
/ 24 июня 2019

Я создал давно работающего сотрудника Celery, который обрабатывает очистку веб-страниц и заполняет объект словаря.Я создал несколько заданий, которые выполняются асинхронно и которые заполняют один и тот же объект dict.Мне нужен способ вывести результат в моем работнике в файл JSON.Это можно делать периодически или после выполнения заданий, но это не должно блокировать мой ответ API.

@celery.task(name="tasks.workertask")
def worker(d, x):
    """
    Do some long task on x and populate the dictionary d
    """

def collect(x_list)
    d = dict()
    for x in x_list:
        worker.delay(d,x)
    return d.copy()

@application.route('/api')
def api():
    #Store x_list
    x_list = [...]
    d = collect(x_list)
    with open('result.json','w') as fp:
        json.dump(d,fp)
    return "Dumping into JSON"

Дамп в result.json пуст, поскольку задача выполняется в фоновом режиме.Я не хочу, чтобы эта задача блокировала мой ответ API, так как задача очень очень длинная (более 12 часов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...