Изменения БД, сделанные в задаче Celery, не отображаются в главном потоке - PullRequest
1 голос
/ 03 октября 2019

При обновлении или создании нового объекта в задаче Celery чтение новых данных в основном потоке завершается неудачно. После обновления / создания я выдаю

db.session.commit()

Из cmd кажется, что данные были обновлены в БД, но, возможно, что-то с сеансом все еще получает старые данные. Когда я обновляю некоторые объекты в одной и той же ветке, все работает нормально.

1 Ответ

0 голосов
/ 03 октября 2019

на самом деле я не уверен, почему нам нужно использовать команду commit для задачи Celery, чтобы завершить транзакцию, а затем снова в главном потоке. ниже приведен рабочий пример:

эта задача сельдерея выполняется каждые 7 секунд.

@scheduler.task()
def run_task():
    task = Tasks.get_task("task1")
    task.update_task({'status': "succeed"})
    db.session.commit()


def test_update_task(self):
    task = create_task("task1", status="active")

    log.warning("task {} status before change:{}".format(task.id, task.status))

    time.sleep(10)

    # Here the celery task will update task status from "active" to "succeed"
    db.session.commit()
    log.warning("test {} task status after Celery change:{}".format(task.id, task.status))
...