Мне нужно написать почти 300 различных вики-страниц, разделенных по типу: [Epic, Features, ....], используя Azure Devops Python Api.
И это занимает у меня много минут, когда я пишу их один за другим
Итак, я попытался реализовать базовую многопоточность
if (multithreading):
threads = []
for task in task_list:
thread = threading.Thread(target=write_one_epic, args=(task, requests_session)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
Это привело меня к этой ошибке
The wiki page operation failed with message : TF401028: The reference 'refs/heads/wikiMaster' has already been updated by another client, so you cannot update it. Please try again.
Обновите, я попробовал с ThreadPoolExecutor
, и это привело к той же ошибке
Ошибка возникает при попытке создать новую страницу
wiki.create_or_update_page(content, Constant.project, Constant.wikiIdentifier, self.actual_path, None)
Операция со страницей вики завершилась неудачей с сообщением: TF401028: ссылка «refs/heads/wikiMaster» уже была обновлена другим клиентом, поэтому вы не можете ее обновить. Пожалуйста, попробуйте еще раз.
Это могло произойти при параллельном обновлении одной и той же вики.
Вы можете отправить данные на удаленный компьютер только в том случае, если вы в курсе последних событий, попытаться извлечь данные перед обновлением и включить цикл повторных попыток и небольшой интервал между каждой попыткой. пожалуйста, проверьте аналогичную ссылку здесь для подробностей.
Кроме того, API Python Azure DevOps представляет собой тонкую оболочку API REST Azure DevOps. Вы можете попробовать использовать REST API непосредственно для этой операции. Вы можете найти образец сценария по ссылке здесь.
Спасибо, но стоит ли многопоточность с точки зрения времени, когда мы добавим все эти вычисления и задержки, или оптимизация классическим способом является лучшей идеей. Потому что для меня целью многопоточности было ускорить создание страниц.
Многопоточность - хорошая идея, но на самом деле вики проекта хранится в репозитории git, проблема вызвана тем, как работает Git, боюсь, вам может потребоваться изменить способ создания вики.
Похоже, что он поддерживается репозиторием Git, и параллельные операции, которые записывают в ссылку
master
, завершаются неудачей. Самое простое решение, конечно, — просто добавить логику повтора...