python 線程隊列,線程池

來源:互聯網
上載者:User

標籤:shutdown   ast   nbsp   先進先出   current   線程池   int   get   組元   

一. 線程隊列

  引入線程隊列 : import queue  #和普通隊列引入方法相同

  線程隊列方法 : 

    q = queue.Queue()  #執行個體化對列,先進先出

    q = queue.LifoQueue()  #執行個體化隊列,後進先出  ( Last in, first out )

    q = queue.PriorityQueue()  #執行個體化隊列,優先順序隊列

      優先順序隊列,put() 方法接收的是一個元組,第一個元素是優先順序,第二個元素是資料

      優先順序如果為數字,按照數字大小比較

      如果優先順序是字串或特殊字元,按照字串或特殊字元的ASCII碼比較,如果ASCII碼相同,按照先進先出原則取出

import queue# q = queue.Queue()#先進先出# q.put(1)# q.put(2)# q.put(3)# q.put(4)# print(q.get())# q = queue.LifoQueue()#後進先出# q.put(1)# q.put(2)# q.put(3)# q.put(4)# print(q.get())q = queue.PriorityQueue()#優先順序隊列,q.put((1,‘11‘))#優先順序隊列添加的參數是一個元組,元組元素為優先q.put((2,‘22‘))q.put((3,‘33‘))q.put((4,‘44‘))print(q.get())

 

二. 線程池

  

import timefrom concurrent.futures import ThreadPoolExecutordef func(num):    time.sleep(0.5)    print(num)    return num*num  #將num*num返回給方法調用者,也就是submit,用t_r接收t = ThreadPoolExecutor(5)    #多線程最大設定數量應該為os.cpu_count()的五倍,盡量不要多lst = []for i in range(10):    t_r = t.submit(func,i)    #提交任務,參數 :第一次參數為要執行的任務,第二個參數為給任務傳的參數和進程池不同的是線程池參數傳遞不需要在寫(args= ),直接寫參數就好    lst.append(t_r) #將任務返回的結果添加到一個列表中t.shutdown()    #相當於進程的close + join   等待子線程執行完再執行主線程print(‘主線程‘)[print(i.result()) for i in lst] #對列表進行迴圈,用result()方法取出,取出的是計算後的結果,並且順序和for迴圈相同
################################map方法##############################

import timefrom concurrent.futures import ThreadPoolExecutordef func(num): time.sleep(0.5) print(num) return num*num
t = ThreadPoolExecutor(5)t.map(func,range(20))#拿不到傳回值,拿到的是產生器. 提交多個任務,相當於for+submit()t.shutdown()print(‘主線程‘)
##########################回呼函數############################
將普通函數的傳回值自動傳給回呼函數處理

def func(num): time.sleep(0.5) print(num) return num*numdef call_back(n): print(‘回呼函數 : ‘,n.result())t = ThreadPoolExecutor(5)lst = []for i in range(10): t.submit(func,i).add_done_callback(call_back)#建立回呼函數,和進程的建立不同

 

python 線程隊列,線程池

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.