场景是:我要批量打api:异步打api之后,统计所有成功的api,存在successCount(int)中;
代码如下
def cloudUpdateOwnerDoveInfoMulti(self, url,paramsList): ''' 依据本地端公环相对应的 ownerid and doveid 批量更新云端公环对应的鸽主与鸽舍资讯 Parameters: url(string) paramsList (Array[object]): {raceID, ownerID, ownerName, doveID, orgRing, dovecoteID, rfID} Returns: successCount (int) ''' try: # sess = requests.Session() successCount= 0 failCount = 0 payloadList = [] for params in paramsList: ownerID = params['ownerID'] ownerName = params['ownerName'] doveID = params['doveID'] orgRing = params['orgRing'] dovecoteID = params['dovecoteID'] rfID = params['rfID'] raceID = params['raceID'] payload = { 'updatetype' : 'ownerDove', 'ownerID' : ownerID, 'ownerName' : ownerName, 'doveID' : doveID, 'orgRing' : orgRing, 'dovecoteID' : dovecoteID, 'rfid' : rfID, 'raceID' : raceID } payloadList.append(payload) async def sendRequest(session,param): async with session.post(url,data=param,verify_ssl =False) as response: return await response.json() async def loopAskapi(): successCount = 0 async with aiohttp.ClientSession() as session: tasks = [] for payload in payloadList: task = asyncio.ensure_future(sendRequest(session, payload)) # task = sendRequest(session,payload) tasks.append(task) responses = await asyncio.gather(*tasks) print(len(responses)) for res in responses: # print(res) # j = json.loads(r.text) status = res['results'] if status == 1: successCount +=1 print("successCount in func",successCount) # print('status', successCount+failCount) return successCount def start_loop(loop): asyncio.set_event_loop(loop) print("successCount in return",loop.run_until_complete(loopAskapi())) #一般使用下面这段代码开线程 # loop = asyncio.new_event_loop() # t = threading.Thread(target=start_loop, args=(loop,)) # t.start() # t.join() #**但是如果要得到回传结果的话,使用下面这段代码,把结果保存在自定义的线程物件中** class MyThread(threading.Thread): def __init__(self,loop): threading.Thread.__init__(self) self.loop = loop self.successCount = 0 def run(self): asyncio.set_event_loop(self.loop) self.successCount = loop.run_until_complete(loopAskapi()) loop = asyncio.new_event_loop() t = MyThread(loop) t.start() # start the thread t.join() # wait for the thread to complete # get the result from the thread successCount = t.successCount return successCount # print(responseList) except Exception as e: print(e)中 return 0