每日技术:python中使用async时,如何得到回传结果

场景是:我要批量打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

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章