<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
之前通過threading.thread()進行了助力介面的多執行緒並行,但是這個針對並行數量較少的時候比較好用,如果並行數量多,除了執行緒包協程這種處理方式的情況下,我們還可以採用執行緒池的方法。
執行緒池的實現通俗講就是把所有的任務放在了訊息佇列裡,開啟多個執行緒後執行執行緒,但執行緒執行結束後不會中斷執行緒任務,會從訊息佇列內繼續獲取執行緒任務進行執行緒執行,這樣執行緒池就比多執行緒操作節省了很多建立執行緒與關閉執行緒的步驟,節約大部分資源與時間。
import concurrent.futures
ThreadPoolExecutor 內有兩種執行緒池方法 map()與submit()今天先說map()方法
with concurrent.futures.ThreadPoolExecutor() as pool: res = pool.map(craw, uid_list) print(res)
map()
內craw為方法名,這裡方法命不帶()uid_list
為方法引數,map()方法內需要傳遞list資料型別5000使用者並行助力
def test_case_09(self): """5000使用者並行助力""" # 通過yaml組態檔封裝方法 獲取uid_list uid_list = YamlHandler(YamlThePath().number_new).get_uid_list() # add_ticket獲取5000賬號登陸狀態 with concurrent.futures.ThreadPoolExecutor() as pool: pool.map(AccountAccess().add_ticket, uid_list) # 5000賬號執行緒池方法助力使用者 with concurrent.futures.ThreadPoolExecutor() as pool: pool.map(PreheatMethod().help, [(uid, self.A, 1) for uid in uid_list]) # 獲取使用者被助力次數 response = PreheatMethod().init(self.A) print(f"當前使用者被助力次數 :{response['data']['userInfo']['helpedCount']}次")
再來看一下兩個介面的方法更好的感知一下
首先是獲取登陸狀態add_ticket
def add_ticket(self, uid): """ 獲取單獨使用者t票 :param uid: 單獨使用者uid :return: """ self.data['url'] = ApiAddress().get_ticket self.data['host'] = ApiAddress().host self.params['uid'] = str(uid) self.params['type'] = 0 self.data['params'] = json.dumps(self.params) res = r().post(url=ApiAddress().ticket, data=self.data) print(f'獲取t票結果:{uid}{res}') return uid
很簡單的一個介面請求 入參只有一個uid,但是注意一下這裡的uid不是list,他只是一個引數。
那麼有的同學就會有疑問,map()內傳遞的方法引數是一個uid內容的list。
map()方法就是把你需要的引數存在list內,通過遍歷的方式去請求你指定的介面。
這時候可能有的人又會問,因為我當時也是這麼問自己的,如果一個方法內有多個引數,其中這些引數有的甚至都不是固定的內容怎麼辦。
咱們看一下另一個請求助力介面的方法
def help(self, agrs): """ 助力使用者 :param agrs: uid:當前使用者uid to_uid:助力使用者uid count:助力次數 :return: """ uid, to_uid, count = agrs self.attrs['toUid'] = str(to_uid) self.attrs['count'] = count response = r().response(uid, self.code, "help", **self.attrs) logger.info(f'help response uid:{uid} to_uid:{to_uid}n{response}') return response
沒錯,我們通過元組的方式傳遞到助力介面內,通過元組內的關鍵字位置分別給指定的元素賦值。
再執行緒池的程式碼內,我們通過列表推導式把uid_list內的引數便利到你指定好的元組內,當然這裡如果是多個引數,也可以用字典,把字典便利key與value當作變化的引數,因為列表推導式給你返回的是list,所以我們把需要的引數放在元組內,元組放在列表內,這樣就可以對多引數的方法使用map()執行緒池進行並行了。
with concurrent.futures.ThreadPoolExecutor() as pool: pool.map(PreheatMethod().help, [(uid, self.A, 1) for uid in uid_list])
[(uid, self.A, 1) for uid in uid_list]
列表推導式獲取後大概就是下方的list資料內容格式
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45