首页 > 解决方案 > 使用 Jira-Python 执行线程偶尔会导致 401 错误

问题描述

我正在尝试使用 Jira-Python 查询并显示大量 JIRA 票证。

我不是一次查询一张票,而是为每张我想从中获取结果的票创建一个线程,将所有结果存储在一个列表中,然后在所有结果都输入后,在表格中显示结果。

这适用于少于约 200 个票证的查询,但任何大于该票数的查询,我开始仅在某些线程上收到 401 错误,而其他线程则正常。

我对登录数据和获取要通过的小票列表没有任何问题。

这是我登录后在主线程中所做的事情:

jiraTicketLists = self.chunks(self.jiraQueryData, listSize) #Split full list into smaller lists to run in each thread

for jiraTicketList in jiraTicketLists:
    t = threading.Thread(target=jiraFunctions.queryJiraTicket, args=(jiraTicketList, self.jiraFieldList, self))
    t.start()

并在创建的线程中:

def queryJiraTicket(ticketNumberList, attributeList, parent):

    for ticketNumber in ticketNumberList:
        try:
            issue = JIRA.issue(ticketNumber, expand='changelog')

            jiraDict = {}

            for attribute in attributeList:
                jiraAttr = ""

                if attribute == "Summary":
                    jiraAttr = issue.fields.summary
                elif attribute == "Description":
                    jiraAttr = issue.fields.description
                elif attribute == "Assignee":
                    try:
                        jiraAttr = issue.fields.assignee.name
                    except:
                        jiraAttr = "Unassigned"
                elif attribute == "Status":
                    jiraAttr = issue.fields.status
                elif attribute == "Priority":
                    jiraAttr = issue.fields.priority
                elif attribute == "Type":
                    jiraAttr = issue.fields.issuetype
                elif attribute == "Labels":
                    jiraAttr = issue.fields.labels
                elif attribute == "Comments":
                    jiraAttr = [comment["body"] for comment in issue.raw['fields']['comment']['comments']]
                elif attribute == "Ticket Number":
                    jiraAttr = issue
                elif attribute == "Transitions":
                    jiraAttr = JIRA.transitions(issue)
                elif attribute == "Changelog":
                    changelog = issue.changelog

                    historyList = []
                    for history in changelog.histories:
                        for item in history.items:
                            historyList.append(history.created)

                    historyList.sort()

                    jiraAttr = historyList

                jiraDict[attribute] = jiraAttr

            if parent != None:
                #Update UI with new ticket data
                parent.ticketList.append(jiraDict)
                parent.ticketNum = parent.ticketNum + 1

                parent.updateProgressBarSignal.emit()

                if parent.ticketNum == parent.numberOfTickets:
                    parent.getJiraTicketData()

    except jira.JIRAError as e:
        print e.status_code, e.text

知道为什么我在大列表上得到 401 错误,但在小列表上却没有?

标签: pythonmultithreadingjira

解决方案


推荐阅读