python線程池(threadpool)模塊使用筆記 .python 線程池使用推薦

 

 

 

1、安裝與簡介多線程

pip install threadpool   app

pool = ThreadPool(poolsize)  
requests = makeRequests(some_callable, list_of_args, callback)  
[pool.putRequest(req) for req in requests]  
pool.wait()  

 

第一行定義了一個線程池,表示最多能夠建立poolsize這麼多線程;函數

第二行是調用makeRequests建立了要開啓多線程的函數,以及函數相關參數和回調函數,其中回調函數能夠不寫,default是無,也就是說makeRequests只須要2個參數就能夠運行;spa

第三行用法比較奇怪,是將全部要運行多線程的請求扔進線程池,[pool.putRequest(req) for req in requests]等同於線程

  for req in requests:  code

     pool.putRequest(req) blog

第四行是等待全部的線程完成工做後退出。ip

 

2、代碼實例get

import time
def sayhello(str):
    print "Hello ",str
    time.sleep(2)

name_list =['xiaozi','aa','bb','cc']
start_time = time.time()
for i in range(len(name_list)):
    sayhello(name_list[i])
print '%d second'% (time.time()-start_time)

 

 

改用線程池代碼,花費時間更少,更效率回調函數

import time
import threadpool  
def sayhello(str):
    print "Hello ",str
    time.sleep(2)

name_list =['xiaozi','aa','bb','cc']
start_time = time.time()
pool = threadpool.ThreadPool(10) 
requests = threadpool.makeRequests(sayhello, name_list) 
[pool.putRequest(req) for req in requests] 
pool.wait() 
print '%d second'% (time.time()-start_time)

 

 

 當函數有多個參數的狀況,函數調用時第一個解包list,第二個解包dict,因此能夠這樣:

def hello(m, n, o):
    """"""
    print "m = %s, n = %s, o = %s"%(m, n, o)
     
 
if __name__ == '__main__':
     
   # 方法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)]    
     
    pool = threadpool.ThreadPool(2)
    requests = threadpool.makeRequests(hello, func_var)
    [pool.putRequest(req) for req in requests]
    pool.wait()

 

須要把所傳入的參數進行轉換,而後帶人線程池。

 

def getuserdic():
    username_list=['xiaozi','administrator']
    password_list=['root','','abc123!','123456','password','root']
    userlist = []
    
    for username in username_list:
        
        user =username.rstrip()
        for password in password_list:
            pwd = password.rstrip()
            userdic ={}
            userdic['user']=user
            userdic['pwd'] = pwd
            tmp=(None,userdic)
            userlist.append(tmp)
    return userlist
相關文章
相關標籤/搜索