91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python之怎么使用線程池map()方法傳遞多參數list

發布時間:2023-03-14 14:14:58 來源:億速云 閱讀:287 作者:iii 欄目:開發技術

這篇文章主要介紹“python之怎么使用線程池map()方法傳遞多參數list”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“python之怎么使用線程池map()方法傳遞多參數list”文章能幫助大家解決問題。

線程池map()方法傳遞多參數list

之前通過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數據內容格式

python之怎么使用線程池map()方法傳遞多參數list

關于“python之怎么使用線程池map()方法傳遞多參數list”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

于都县| 周口市| 靖宇县| 谢通门县| 西畴县| 融水| 皋兰县| 朝阳市| 巴彦淖尔市| 静海县| 前郭尔| 临武县| 巴马| 九江县| 肃南| 三河市| 贵州省| 环江| 牙克石市| 大冶市| 会同县| 彩票| 武清区| 如皋市| 陆丰市| 华阴市| 高陵县| 龙门县| 平果县| 井冈山市| 赤壁市| 铅山县| 侯马市| 余姚市| 本溪市| 彩票| 弥勒县| 龙井市| 新民市| 绥阳县| 栖霞市|