Вложенная задача сельдерея (задачи внутри задач) ⇐ Python
Вложенная задача сельдерея (задачи внутри задач)
Я написал 2 задачи update_all_rss, но не знаю, какая из них лучше. может кто-нибудь объяснить, какой из них мне следует использовать?
Информация: каждая задача независима и не требует результата другой задачи.
Буду очень признателен, если вы дадите мне какие-либо предложения по оптимизации общей производительности этих задач
@shared_task(base=BaseTaskWithRetry, Task_time_limit=600) защита update_all_rss(): для xml_link_obj в XmlLink.objects.all().iterator(): update_single_rss.delay(xml_link_obj) против
@shared_task(base=BaseTaskWithRetry, Task_time_limit=600) защита update_all_rss(): xml_links = список(XmlLink.objects.all().iterator()) задачи = (update_single_rss.s(xml_link_obj) для xml_link_obj в xml_links) result_group = группа (задачи) result_group() если поможет, это задача update_single_rss:
@shared_task(base=BaseTaskWithRetry, Task_time_limit=120) защита update_single_rss(xml_link_obj): Channel_qs = Channel.objects.select_based('xml_link').prefetch_related("xml_link__rss_type").filter( xml_link=xml_link_obj) если канал_qs.exists(): канал = канал_qs.get() канал_парсер = канал_парсер_маппер (xml_link_obj.channel_parser) канал_информация = канал_парсер (xml_link_obj.xml_link) ifchannel.last_update !=channel_info.get("last_update"): Channel.last_update = Channel_info.get("last_update") items_parser = items_parser_mapper(xml_link_obj.items_parser) items_info = items_parser(xml_link_obj.xml_link) ItemClass = item_model_mapper(xml_link_obj.rss_type.name) пытаться: с транзакцией.atomic(): канал.сохранить() предметы = ( ItemClass(**элемент, канал=канал) для элемента в items_info если нет ItemClass.objects.filter(guid=item.get("guid")).exists() ) ItemClass.objects.bulk_create(предметы) кроме IntegrityError как e: return {"Сообщение": str(e)} return {"Сообщение": f"Канал {channel.title} был обновлен"} return {"Сообщение": f"Канал {channel.title} уже обновлен"} return {"Сообщение": f"Канала для {xml_link_obj.xml_link} не существует"}
Я написал 2 задачи update_all_rss, но не знаю, какая из них лучше. может кто-нибудь объяснить, какой из них мне следует использовать?
Информация: каждая задача независима и не требует результата другой задачи.
Буду очень признателен, если вы дадите мне какие-либо предложения по оптимизации общей производительности этих задач
@shared_task(base=BaseTaskWithRetry, Task_time_limit=600) защита update_all_rss(): для xml_link_obj в XmlLink.objects.all().iterator(): update_single_rss.delay(xml_link_obj) против
@shared_task(base=BaseTaskWithRetry, Task_time_limit=600) защита update_all_rss(): xml_links = список(XmlLink.objects.all().iterator()) задачи = (update_single_rss.s(xml_link_obj) для xml_link_obj в xml_links) result_group = группа (задачи) result_group() если поможет, это задача update_single_rss:
@shared_task(base=BaseTaskWithRetry, Task_time_limit=120) защита update_single_rss(xml_link_obj): Channel_qs = Channel.objects.select_based('xml_link').prefetch_related("xml_link__rss_type").filter( xml_link=xml_link_obj) если канал_qs.exists(): канал = канал_qs.get() канал_парсер = канал_парсер_маппер (xml_link_obj.channel_parser) канал_информация = канал_парсер (xml_link_obj.xml_link) ifchannel.last_update !=channel_info.get("last_update"): Channel.last_update = Channel_info.get("last_update") items_parser = items_parser_mapper(xml_link_obj.items_parser) items_info = items_parser(xml_link_obj.xml_link) ItemClass = item_model_mapper(xml_link_obj.rss_type.name) пытаться: с транзакцией.atomic(): канал.сохранить() предметы = ( ItemClass(**элемент, канал=канал) для элемента в items_info если нет ItemClass.objects.filter(guid=item.get("guid")).exists() ) ItemClass.objects.bulk_create(предметы) кроме IntegrityError как e: return {"Сообщение": str(e)} return {"Сообщение": f"Канал {channel.title} был обновлен"} return {"Сообщение": f"Канал {channel.title} уже обновлен"} return {"Сообщение": f"Канала для {xml_link_obj.xml_link} не существует"}
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
График задач сельдерея (обеспечение выполнения задачи только по одному за раз)
Anonymous » » в форуме Python - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-