Django background_task приводит к ошибке BrokenPipeError
Я использую django 3.1.4, django-background-tasks 1.2.5. У меня зарегистрирована задача, которая успешно завершается, когда я выполняю updateProducts.now() из оболочки, но по какой-то причине, когда она выполняется автоматически, в разных частях кода возникает BrokenPipeError. Часто это относится к тому, что коллекция не определена в словаре, который находится в конструкторе класса GClient. Все коллекции определяются в конструкторе класса GClient.
@background(schedule=timezone.now())
def updateProducts() -> None:
client = GClient()
db_client = DBClient()
total_products = 0
collections = ["collection1", "collection2", "collection3", "collection4"]
for collection in collections:
products = client.getProductOfCollection(collection)
if products is None:
continue
total_products += len(products)
for product in products:
db_client.addProduct(product)
if "inventoryQuantity" in product and product["inventoryQuantity"] > 0:
notify_restock(product["id"], db_client)
print(db_client.updateErrors)
db_client.updateErrors = {}
print(f"Done Updating {total_products} Products")
if not Task.objects.filter(verbose_name="Update Products").exists():
updateProducts(verbose_name="Update Products", repeat=7200, repeat_until=None)
getProductOfCollection - Выполняет GraphQL запрос на массив продуктов, который может занять от 3 секунд до 1 минуты, периодически проверяет, был ли он выполнен. После выполнения он получает ссылку с json для загрузки, загружает json, разбирает его, сохраняет все продукты в массив и возвращает его.