好的,以下是完整的优化后的代码:
import multiprocessing
def get_qualification_audit_status_num1(self):
"""
获取产工操作记录中处于审核中的 oa 流程号数据
:return:
"""
accessToken = self.worker_login()
api_data_list = self.api_data_list()
result_list = []
with multiprocessing.Pool() as pool:
results = pool.map(self.process_api_data, [(accessToken, api_data) for api_data in api_data_list])
result_list.extend(results)
return result_list
def process_api_data(args):
accessToken, api_data = args
url = "https://worker.runjian.com:32001/workerApi/" + api_data.get("api")
headers = {
'Access-Token': accessToken
}
pageNum = 1
pageSize = 1000
item_list = []
oanumber_list = []
while True:
payload = {
"pageNum": pageNum,
"pageSize": pageSize
}
if api_data.get("processStatus") == 0:
payload['processStatus'] = api_data.get("processStatus")
elif api_data.get("auditStatus") == 1:
payload['auditStatus'] = api_data.get("auditStatus")
else:
payload = payload
timeout = 60 # 单位是秒,这里设置超时时间为1分钟
try:
response = requests.post(url, json=payload, headers=headers, timeout=timeout)
if response.status_code == 200:
data = response.json()
records_list = data['data']['records']
for i in records_list:
item_list.append(i)
if api_data.get("processStatus") == 0:
oaNumber = i['oaNumber']
processStatus = i['processStatus']
if processStatus == 0:
processStatus = "待审核"
elif processStatus == 2:
processStatus = "驳回"
else:
processStatus = "未识别的状态"
processdict = {"oaNumber": oaNumber, "processStatus": processStatus}
oanumber_list.append(processdict)
elif api_data.get("auditStatus") == 1:
oaNumber = i.get('serialCode') or i.get('oaNumber')
processStatus = i['status']
if processStatus == 0:
processStatus = "待审核"
elif processStatus == 2:
processStatus = "驳回"
else:
processStatus = "未识别的状态"
processdict = {"oaNumber": oaNumber, "processStatus": processStatus}
oanumber_list.append(processdict)
total_pages = data['data']['pages']
if pageNum >= total_pages:
result = {"name": api_data.get("name"), "oanumber_list": oanumber_list}
print("当前查询模块:{0},存在审核中流程总数为:{1}".format(api_data.get("name"), len(oanumber_list)))
print("当前查询模块:{0},获取成功".format(api_data.get("name")))
return result
pageNum += 1
except requests.Timeout:
print("请求超时")
except Exception as e:
print("当前接口请求异常,当前页:{0},已跳出循环,菜单名称:{1},接口地址:{2},异常原因为:{3}".format(pageNum, api_data.get("name"),
api_data.get("api"), e))
以上是完整的代码优化示例。其中,get_qualification_audit_status_num1
函数中只调用一次self.worker_login()
方法来获取accessToken
,然后通过pool.map
与api_data
一起传递给process_api_data
函数。这样可以避免多次获取accessToken
,提高效率。