Обновление базы данных Django-Celery

У меня есть задача celery для обновления части моей базы данных. Проблема в том, что если я задерживаю задачу (передаю ее в celery), она обрабатывается, но не обновляет базу данных. Когда я вызываю задачу вручную (например, refresh_printfuldb(), а не refresh_printfuldb.delay()), она работает нормально, и я вижу изменения при запросе к базе данных.

Журнал работы celery выглядит следующим образом:

[2021-09-05 16:48:48,541: INFO/MainProcess] Task t_well.tasks.refresh_printfuldb[55eb39eb-f1e4-4b7d-b509-a87affe0535b] received
[2021-09-05 16:48:49,069: INFO/SpawnPoolWorker-32] child process 47336 calling self.run()
[2021-09-05 16:48:49,081: INFO/SpawnPoolWorker-33] child process 42852 calling self.run()

Дерево файлов:

-mysite/
    celery.py
    settings.py
    ...
-app/
    models.py
    tasks.py
    printfulapi.py
    ...

celery.py:

import os 
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', "mysite.settings")

app = Celery('mysite')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

settings.py:

...
CELERY_BROKER_URL = 'redis://192.168.1.188:6379'

CELERY_RESULT_BACKEND = 'django-db'
...

models.py: Как я уже сказал, если я запрошу базу данных после ручного вызова refresh_printfuldb(), я увижу изменения, так что я полагаю, что проблема не в моделях.

tasks.py:

from celery import shared_task
from . import printfulapi

...

@shared_task
def refresh_printfuldb():
    printfulapi.refresh_orders(orders_in_api_page)
    #other calls to the printfulapi module
    ...

...

printfulapi.py:

from .models import Product, Variant, SyncProduct, SyncVariant, Order

def refresh_orders(orders_in_api: List[Dict]) -> None:
    for order_in_api in orders_in_api:
        order_id = order_in_api["id"]
        order = get_object_with_id(Order, order_id)

        order.status = order_in_api["status"]
        order.created = order_in_api["created"]
        order.updated = order_in_api["updated"]
        order.recipient = order_in_api["recipient"]
        order.items = order_in_api["items"]
        order.costs = order_in_api["costs"]

        order.save()

#some functions that make changes to the models
#all the functions essentially work like refresh_orders, they're just a bit more 
#complicated
#refresh_orders should be a good example

Я использую celery beat для запуска этой задачи каждые 30 минут, и он выполняет ее каждые 30 минут, как и положено. Рабочий получает задание и начинает его обрабатывать. Я просто не вижу изменений в базе данных после ее выполнения. Опять же, я вижу изменения, если refresh_printfuldb вызывается вручную. В чем может быть проблема?

Вернуться на верх