一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python線程池(threadpool)模塊使用筆記詳解

python線程池(threadpool)模塊使用筆記詳解

2020-12-18 00:58Xiao2i Python

這篇文章主要介紹了python線程池(threadpool)模塊使用筆記詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近在做一個視頻設備管理的項目,設備包括(攝像機,DVR,NVR等),包括設備信息補全,設備狀態推送,設備流地址推送等,如果同時導入的設備數量較多,如果使用單線程進行設備檢測,那么由于設備數量較多,會帶來較大的延時,因此考慮多線程處理此問題。

可以使用python語言自己實現線程池,或者可以使用第三方包threadpool線程池包,本主題主要介紹threadpool的使用以及其里面的具體實現。

一、安裝與簡介

?
1
2
3
4
5
6
pip install threadpool 
 
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個參數就可以運行;

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

for req in requests:  pool.putRequest(req)

第四行是等待所有的線程完成工作后退出。

二、代碼實例

?
1
2
3
4
5
6
7
8
9
10
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)

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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,所以可以這樣:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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()   

需要把所傳入的參數進行轉換,然后帶人線程池。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/xiaozi/p/6182990.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99资源站 | 99久久成人 | 免费看欧美一级特黄a大片一 | 亚洲国产成人久久综合一 | 青草午夜精品视频在线观看 | 天天舔天天干天天操 | 国产精品va在线观看无 | 日本漫画工囗全彩番在线 | 日本一区二区免费在线观看 | 免费看欧美一级特黄a大片一 | 国产情侣视频观看 | 男同激情视频 | 激情亚洲 | 涩涩国产精品福利在线观看 | 亚洲精品第一国产综合高清 | 爱草视频 | 操女人bb| 亚洲国产AV一区二区三区四区 | 久久免费看少妇高潮A片特爽 | 精品九九视频 | 国产成人久久精品推最新 | 国产精品午夜国产小视频 | 亚洲国产精品自在自线观看 | videos欧美肥婆 | 国产免费一区二区三区 | 国产一级特黄aa大片免费 | 国产第一页无线好源 | 国产精品久久国产精品99盘 | 青青草国产免费久久久91 | 五月色天在线视频综合观看 | 手机在线伦理片 | 亚洲免费高清视频 | 人成午夜免费大片在线观看 | avove全部视频在线观看 | 爽好大快深点一视频 | 亚欧洲乱码视频一二三区 | 久久久精品成人免费看 | 成年人黄视频在线观看 | 成人国产一区二区 | 草溜短视频 | 国产成人精品日本亚洲网址 |