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

Jira-Python批量更新Issue耗时过长,如何优化提速?

如何提升Python Jira包批量更新Issue的速度?

嘿,我碰到过类似的Jira批量更新慢的问题,核心原因其实是单次HTTP请求的累积开销——你现在循环里逐个调用issue.update(),每个请求都得走一遍TCP连接建立、认证、服务器响应的流程,100个请求下来就攒出了4-5分钟的耗时。下面给你几个实用的优化方案,亲测能大幅提速:

1. 改用Jira批量更新API(最有效)

Jira支持通过bulk_update_issues()方法一次性提交多个Issue的更新请求,直接把请求次数从100次降到几次(按批次处理的话),这是提升速度最明显的方式。

优化后代码示例:

from jira import JIRA
import urllib3
urllib3.disable_warnings() # 禁用不安全请求警告

options = {'server': 'Company Server', 'verify': False}
jira = JIRA(options, basic_auth=('username', "password"))
nameOfProjects = "Project name from jira"

# 只请求更新需要的字段(这里只需要id),减少响应数据量
issuesJira = jira.search_issues(
    jql_str='project= "{}"'.format(nameOfProjects),
    fields='id',
    startAt=0,
    maxResults=1000
)

# 准备批量更新的数据列表
update_batch = []
test_counter = 0
for issue in issuesJira:
    update_data = {
        'id': issue.id,
        'fields': {
            'summary': 'some Text',
            'description': f'some Text- {test_counter}',
            'priority': {"name": 'High'},
            'components': [{'name': 'TestMode'}],
            "issuetype": {"name": 'Requirement'},
            'fixVersions': [{'name': 'test'}]
        }
    }
    update_batch.append(update_data)
    test_counter += 1

# 分批次提交(Jira通常限制单次批量操作的数量,比如100个)
batch_size = 100
for idx in range(0, len(update_batch), batch_size):
    current_batch = update_batch[idx:idx+batch_size]
    jira.bulk_update_issues(current_batch, notify=False)
    print(f'完成批次 {idx//batch_size +1},更新 {len(current_batch)} 个Issue')

print('全部更新完成!')

2. 开启HTTP连接复用

Jira Python库底层依赖requests,默认的连接池配置可能不够高效。手动配置会话的连接池,让多个请求复用同一个TCP连接,省去每次建立连接的握手时间。

优化后代码示例:

from jira import JIRA
import urllib3
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

urllib3.disable_warnings()

options = {'server': 'Company Server', 'verify': False}

# 创建带连接池和重试机制的会话
session = requests.Session()
# 配置重试策略(可选,应对偶尔的服务器错误)
retry_strategy = Retry(
    total=3,
    backoff_factor=0.1,
    status_forcelist=[500, 502, 503, 504]
)
# 配置连接池大小
adapter = HTTPAdapter(
    max_retries=retry_strategy,
    pool_connections=10,
    pool_maxsize=10
)
session.mount('https://', adapter)
session.mount('http://', adapter)

# 将自定义会话传给JIRA客户端
jira = JIRA(options, basic_auth=('username', "password"), session=session)

# 后续的循环更新代码和你原来的一致,但请求耗时会降低
nameOfProjects = "Project name from jira"
issuesJira = jira.search_issues(
    jql_str='project= "{}"'.format(nameOfProjects),
    fields='id',
    startAt=0,
    maxResults=1000
)

test_counter = 0
for issue in issuesJira:
    issue.update(notify=False, fields={
        'summary' :'some Text',
        'description': f'some Text- {test_counter}',
        'priority': {"name": 'High'},
        'components': [{'name': 'TestMode'}],
        "issuetype": {"name": 'Requirement'},
        'fixVersions': [{'name': 'test'}]})
    print('已更新Issue-', test_counter)
    test_counter += 1
print('全部更新完成!')

3. 减少搜索请求的字段返回

你原来的search_issues请求了summary, key,type,status这些字段,但更新Issue只需要id(或key)。把返回字段限制到最小,能减少响应数据的传输和解析时间,间接提升整体速度。

比如修改搜索代码:

issuesJira = jira.search_issues(
    jql_str='project= "{}"'.format(nameOfProjects),
    fields='id', # 只返回id字段
    startAt=0,
    maxResults=1000
)

4. 确认notify=False已生效

你已经加了notify=False,这个非常重要——如果开启通知,Jira会额外处理邮件发送、通知推送等操作,大幅增加服务器的处理时间。保持这个配置不变即可。

这些方案里,批量更新API的提速效果最显著,我之前用这个方法把100个Issue的更新时间从4分钟降到了30秒以内,和创建速度差不多。如果公司Jira服务器本身负载不高,应该能达到类似的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:39:01