激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黄色片网页 | 国产伦精品一区二区三区在线 | 成人毛片100部免费观看 | 免费嗨片首页中文字幕 | 久久久三级免费电影 | 欧美高清一级片 | 国产精品jk白丝蜜臀av软件 | 曰韩黄色片 | av在线日韩 | chinesexxxx极品少妇 | 宅男噜噜噜66国产在线观看 | 久久久入口 | 欧美一级黄 | 成人午夜免费在线观看 | 激情影院在线观看 | 中文字幕11| 99re66热这里只有精品8 | 久久久青青草 | 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 欧美一区二区三区四区五区动图 | 国产精品久久久久久久久久久久午夜 | 九九热免费在线观看 | 长泽雅美av | 成人福利在线观看 | 91看片在线观看视频 | 在线视频观看国产 | 欧美在线观看19 | 性欧美一区二区三区 | 日韩视频在线不卡 | 久精品国产 | 欧美一区2区三区4区公司二百 | 最新中文字幕第一页视频 | 97青青| 久久久久久久久久亚洲 | 亚洲第五色综合网 | 理论片中文字幕 | 天使萌一区二区三区免费观看 | 成人三区四区 | 欧美a在线播放 | 欧美日韩免费一区 | 多男操一女视频 |