亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python多線程簡易版 - 線程池THREADPOOL及回調(diào)函數(shù)

系統(tǒng) 1801 0

threadpool

  • makeRequests的原型如下 def makeRequests(callable_, args_list, callback=None, exc_callback=_handle_thread_exception),可以看出第一個(gè)參數(shù)是線程將要啟動(dòng)任務(wù)函數(shù),第二個(gè)是要傳個(gè)任務(wù)函數(shù)的參數(shù)列表,第三個(gè)是回調(diào)函數(shù),可以用于收集任務(wù)結(jié)束后的結(jié)果或者環(huán)境清理
  • args_list 中每一項(xiàng)要么是一個(gè)單獨(dú)的變量,要么是一個(gè)2個(gè)元素的元組,該元組第1項(xiàng)是位置參數(shù)的列表,該元組的第2項(xiàng)是關(guān)鍵參數(shù)的字典(很繞口,但最重要
  • 任務(wù)函數(shù)的多參數(shù),你可以統(tǒng)統(tǒng)通過位置參數(shù)列表傳進(jìn)去,也可以統(tǒng)統(tǒng)通過關(guān)鍵字參數(shù)字典傳進(jìn)去,也可以通過混合方式傳進(jìn)去
  • 例如你的任務(wù)函數(shù)有兩個(gè)參數(shù),一個(gè)是name,一個(gè)是age,那么你可以傳args_list為[([‘python’, 12], None), ]這樣的形式, None是未傳遞的關(guān)鍵字參數(shù)字典。
  • 也可以傳args_list為[(None, {‘name’:‘python’, ‘a(chǎn)ge’: 12}), ]這樣的形式,None是未傳遞的位置參數(shù)列表。
  • 還可以傳args_list為[([‘python’], {‘a(chǎn)ge’: 12}), ]這樣的形式,這就是混合形式
  • 個(gè)人感覺太靈活了,而且不好理解

以下是簡單的4行代碼:

            
              pool 
              
                =
              
               threadpool
              
                .
              
              ThreadPool
              
                (
              
              
                10
              
              
                )
              
              
                #建立線程池,控制線程數(shù)量為10
              
              
reqs 
              
                =
              
               threadpool
              
                .
              
              makeRequests
              
                (
              
              get_title
              
                ,
              
               data
              
                ,
              
               print_result
              
                )
              
              
                #構(gòu)建請求,
              
              
                #get_title為要運(yùn)行的函數(shù),data為要多線程執(zhí)行函數(shù)的參數(shù),
              
              
                #最后這個(gè)print_result是可選的,是對前兩個(gè)函數(shù)運(yùn)行結(jié)果的操作
              
              
                [
              
              pool
              
                .
              
              putRequest
              
                (
              
              req
              
                )
              
              
                for
              
               req 
              
                in
              
               reqs
              
                ]
              
              
                #多線程一塊執(zhí)行
              
              
pool
              
                .
              
              wait
              
                (
              
              
                )
              
              
                #線程掛起,直到結(jié)束
              
            
          

創(chuàng)建線程池,線程數(shù)為10:

            
              pool 
              
                =
              
               threadpool
              
                .
              
              ThreadPool
              
                (
              
              
                10
              
              
                )
              
            
          

創(chuàng)建線程請求,包涵調(diào)用的函數(shù)、參數(shù)和回調(diào)函數(shù):

            
              requests 
              
                =
              
               threadpool
              
                .
              
              makeRequests
              
                (
              
              func
              
                ,
              
               args_list
              
                ,
              
               call_back
              
                )
              
              
                # 源代碼
              
              
                # `args_list`` should be either a 2-item tuple of the list of positional arguments and a dictionary of keyword arguments or a single, non-tuple argument.
              
            
          

args_list必須是包含2個(gè)元素的元組,第一個(gè)是list,第二個(gè)是dict,如果線程函數(shù)需要多個(gè)參數(shù),需要拼接list或者dict。

            
              
                # 方法1  
              
              
    lst_vars_1 
              
                =
              
              
                [
              
              
                '1'
              
              
                ,
              
              
                '2'
              
              
                ,
              
              
                '3'
              
              
                ]
              
              
    lst_vars_2 
              
                =
              
              
                [
              
              
                '4'
              
              
                ,
              
              
                '5'
              
              
                ,
              
              
                '6'
              
              
                ]
              
              
    func_var 
              
                =
              
              
                [
              
              
                (
              
              lst_vars_1
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              lst_vars_2
              
                ,
              
              
                None
              
              
                )
              
              
                ]
              
              
                # 方法2
              
              
    dict_vars_1 
              
                =
              
              
                {
              
              
                'm'
              
              
                :
              
              
                '1'
              
              
                ,
              
              
                'n'
              
              
                :
              
              
                '2'
              
              
                ,
              
              
                'o'
              
              
                :
              
              
                '3'
              
              
                }
              
              
    dict_vars_2 
              
                =
              
              
                {
              
              
                'm'
              
              
                :
              
              
                '4'
              
              
                ,
              
              
                'n'
              
              
                :
              
              
                '5'
              
              
                ,
              
              
                'o'
              
              
                :
              
              
                '6'
              
              
                }
              
              
    func_var 
              
                =
              
              
                [
              
              
                (
              
              
                None
              
              
                ,
              
               dict_vars_1
              
                )
              
              
                ,
              
              
                (
              
              
                None
              
              
                ,
              
               dict_vars_2
              
                )
              
              
                ]
              
            
          

將所有要運(yùn)行多線程的請求扔進(jìn)線程池:

            
              
                [
              
              pool
              
                .
              
              putRequest
              
                (
              
              req
              
                )
              
              
                for
              
               req 
              
                in
              
               requests
              
                ]
              
              
                # 等同于
              
              
                for
              
               req 
              
                in
              
               requests
              
                :
              
                
    pool
              
                .
              
              putRequest
              
                (
              
              req
              
                )
              
              

等待所有的線程完成工作后退出:
pool
              
                .
              
              wait
              
                (
              
              
                )
              
            
          

示例:

            
              
                #!/usr/bin/env python
              
              
                # coding:utf-8
              
              
                import
              
               time

              
                import
              
               random

              
                import
              
               threadpool

HEHE 
              
                =
              
              
                dict
              
              
                (
              
              
                )
              
              
                def
              
              
                sayhello
              
              
                (
              
              name
              
                ,
              
               v
              
                )
              
              
                :
              
              
                global
              
               HEHE
    
              
                if
              
               HEHE
              
                .
              
              has_key
              
                (
              
              name
              
                )
              
              
                :
              
              
        HEHE
              
                [
              
              name
              
                ]
              
              
                =
              
               HEHE
              
                [
              
              name
              
                ]
              
              
                +
              
              
                '+'
              
              
                +
              
               v
    
              
                else
              
              
                :
              
              
        HEHE
              
                [
              
              name
              
                ]
              
              
                =
              
               v
    
              
                #time.sleep(2)
              
              
                #name_list = [(['caoshuai', '1'], None), (['yangliu', '2'], None),(['caoshuai', '3'], None),(['ss', '10'], None),(['wwwwww', '12'], None),]
              
              
name_list 
              
                =
              
              
                [
              
              
                (
              
              
                [
              
              
                'caoshuai'
              
              
                ,
              
              
                '1'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'caoshuai'
              
              
                ,
              
              
                '2'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'a'
              
              
                ,
              
              
                '3'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'ss'
              
              
                ,
              
              
                '10'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'wwwwww'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'm'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'n'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'b'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'v'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'x'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                (
              
              
                [
              
              
                'z'
              
              
                ,
              
              
                '12'
              
              
                ]
              
              
                ,
              
              
                None
              
              
                )
              
              
                ,
              
              
                ]
              
              
                #name_list = [1, -5, 6, -4]
              
              

start_time 
              
                =
              
               time
              
                .
              
              time
              
                (
              
              
                )
              
              

pool_t 
              
                =
              
               threadpool
              
                .
              
              ThreadPool
              
                (
              
              
                4
              
              
                )
              
              

requestss 
              
                =
              
               threadpool
              
                .
              
              makeRequests
              
                (
              
              sayhello
              
                ,
              
               name_list
              
                )
              
              
                [
              
              pool_t
              
                .
              
              putRequest
              
                (
              
              req
              
                )
              
              
                for
              
               req 
              
                in
              
               requestss
              
                ]
              
              

pool_t
              
                .
              
              wait
              
                (
              
              
                )
              
              
                print
              
               HEHE

              
                print
              
              
                "%s second"
              
              
                %
              
              
                (
              
              time
              
                .
              
              time
              
                (
              
              
                )
              
              
                -
              
              start_time
              
                )
              
              
                while
              
              
                True
              
              
                :
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                1
              
              
                )
              
            
          

回調(diào)函數(shù)

結(jié)果收集用callback參數(shù)
callback必須接受2個(gè)匿名參數(shù), 按順序分別是WorkRequest對象和任務(wù)函數(shù)的結(jié)果。
舉個(gè)栗子

            
              
                def
              
              
                save_callback
              
              
                (
              
              request
              
                ,
              
               result
              
                )
              
              
                :
              
              
                # 第1個(gè)參數(shù)是request,可以訪問request.requestID
              
              
                # 第2個(gè)參數(shù)是request執(zhí)行完的結(jié)果
              
              
                print
              
              
                (
              
              request
              
                .
              
              requestID
              
                ,
              
               result
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              
                'result.txt'
              
              
                ,
              
              
                'a'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
        f
              
                .
              
              write
              
                (
              
              result 
              
                +
              
              
                '\n'
              
              
                )
              
              
                def
              
              
                get_user_info
              
              
                (
              
              uid
              
                ,
              
               sex
              
                ,
              
               name
              
                ,
              
               age
              
                )
              
              
                :
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                0.3
              
              
                )
              
              
                return
              
              
                "{0},{1},{2},{3}"
              
              
                .
              
              
                format
              
              
                (
              
              uid
              
                ,
              
               sex
              
                ,
              
               name
              
                ,
              
               age
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    num 
              
                =
              
              
                100
              
              
    para_list 
              
                =
              
              
                [
              
              
                [
              
              i
              
                ,
              
              
                'male'
              
              
                ]
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                1
              
              
                ,
              
               num
              
                )
              
              
                ]
              
              
    users 
              
                =
              
              
                list
              
              
                (
              
              
                )
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                1
              
              
                ,
              
               num
              
                )
              
              
                :
              
              
        user 
              
                =
              
              
                {
              
              
                'name'
              
              
                .
              
              
                format
              
              
                (
              
              i
              
                )
              
              
                :
              
              
                'user{0}'
              
              
                .
              
              
                format
              
              
                (
              
              i
              
                )
              
              
                ,
              
              
                'age'
              
              
                :
              
               i
              
                }
              
              
        users
              
                .
              
              append
              
                (
              
              user
              
                )
              
              
    params 
              
                =
              
              
                zip
              
              
                (
              
              para_list
              
                ,
              
               users
              
                )
              
              
                # print(params)
              
              
                # 形如[([1, 'male'], {'age': 1, 'name': 'user1'}), ...]的參數(shù)列表
              
              

    pool_size 
              
                =
              
              
                10
              
              
    pool 
              
                =
              
               threadpool
              
                .
              
              ThreadPool
              
                (
              
              pool_size
              
                )
              
              
    requests 
              
                =
              
               threadpool
              
                .
              
              makeRequests
              
                (
              
              get_user_info
              
                ,
              
               params
              
                ,
              
               save_callback
              
                )
              
              
                for
              
               req 
              
                in
              
               requests
              
                :
              
              
    	pool
              
                .
              
              putRequest
              
                (
              
              req
              
                )
              
              
    pool
              
                .
              
              wait
              
                (
              
              
                )
              
              
    ```

            
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品欧美亚洲韩国日本不卡 | 日本二区视频 | youjizz中国 | 久久精品国产69国产精品亚洲 | 久久久精品免费热线观看 | 波多野结衣中文丝袜字幕 | 精品久久久久久久久免费影院 | 日韩第三页| 国产精品免费视频能看 | 日韩精品欧美高清区 | 欧洲亚洲一区 | 久久久久久夜精品精品免费啦 | 国产在线精品观看一区 | 亚洲精品综合一区在线 | 免费黄色福利视频 | 好吊妞欧美视频免费 | 看免费黄色一级视频 | 老司机午夜影院 | 99久久国产免费中文无字幕 | 大学生久久香蕉国产线看观看 | 伊人久久影视 | 伊在人亚洲香蕉精品播放 | 久久99九九99九九99精品 | 国产精品美女自在线观看免费 | 日本xx视频 | 色综合图 | 黄色免费看视频 | 日本一区二区三区欧美在线观看 | 真实国产乱人伦在线视频播放 | 一本伊在人香蕉线观新在线 | 欧美一二区| 成人免费淫片在线费观看 | 五月激情综合 | 亚洲精品一区二区三区中文字幕 | 亚洲国产福利精品一区二区 | 天天狠天天操 | 亚洲欧美一区二区三区九九九 | 4htv影院永久免费在线地址 | 波多野给衣一区二区三区 | 国产精品久久久久亚洲 | 成人欧美一区在线视频在线观看 |