You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure DevOps Python API多线程创建Wiki页面遇TF401028错误

解决Azure DevOps Wiki多线程创建页面的TF401028冲突错误

错误原因

Azure DevOps的Wiki本质是基于Git仓库存储的,每创建/更新一个页面都会生成一次Git提交。当你用多线程并发操作时,多个线程同时基于仓库的同一个旧版本进行修改提交,第一个线程提交成功后会更新仓库的HEAD版本,后续线程再提交时就会因为版本不匹配触发TF401028冲突错误。

解决方案

1. 增加错误重试机制

捕获特定的冲突错误,自动重试几次,每次重试前等待几秒,让仓库状态同步。

修改write_one_epic函数,加入重试逻辑:

import time
from azure.devops.exceptions import AzureDevOpsServiceError

def write_one_epic(task, requests_session):
    max_retries = 3
    retry_delay = 2  # 每次重试间隔2秒
    for attempt in range(max_retries):
        try:
            # 原有的wiki创建逻辑
            wiki.create_or_update_page(
                content=task['content'],
                project=Constant.project,
                wiki_identifier=Constant.wikiIdentifier,
                path=self.actual_path,
                version=None
            )
            break
        except AzureDevOpsServiceError as e:
            if "TF401028" in str(e):
                if attempt < max_retries - 1:
                    time.sleep(retry_delay)
                    continue
                else:
                    # 重试次数耗尽,抛出错误或记录日志
                    raise
            else:
                # 其他错误直接抛出
                raise

2. 控制并发线程数

不要一次性启动300个线程,限制并发数量(比如5-10个),减少冲突概率。用ThreadPoolExecutor时指定max_workers:

from concurrent.futures import ThreadPoolExecutor

if multithreading:
    max_workers = 8  # 根据实际情况调整,建议5-10
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        executor.map(write_one_epic, task_list, [requests_session]*len(task_list))

3. 备选方案:串行批量提交(适合冲突频繁场景)

如果重试和控制并发还是有大量冲突,可以改成串行创建,每批次后短暂等待,降低仓库版本冲突的概率:

for task in task_list:
    write_one_epic(task, requests_session)
    time.sleep(0.5)  # 短暂等待,给仓库状态同步留时间

内容的提问来源于stack exchange,提问作者Kaiwinta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:40:02