目錄
線程池map()方法傳遞多參數list
執行緒池並發需要引入模組
#他的語法為
#先看整體程式碼
首頁 後端開發 Python教學 python之怎麼使用執行緒池map()方法傳遞多參數list

python之怎麼使用執行緒池map()方法傳遞多參數list

Apr 29, 2023 pm 04:25 PM
python list map()

線程池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的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles