佇列與執行緒補充,協程

2022-04-08 22:57:29 字數 2291 閱讀 6294

佇列  (同乙個程序內的佇列 , 多執行緒)

import queue  queue.queue()  先進先出  queue.lifoqueue()  後進先出  queue.priorityqueue()  優先順序佇列

q = queue.priorityqueue()

q.put()   接收的是乙個元組

元組中的第乙個引數是 : 表示當前資料的優先順序

元組中的第二個引數是 : 需要存放到佇列中的資料

優先順序的比較(表示優先順序的型別必須是一致的)

如果都是int,比數值的大小,優先選出數值較小的

如果都是str ,比較字串的大小,(從第乙個字串的ascaii碼開始比較)優先選出ascaii碼中靠前的.

執行緒池存放固定數量的執行緒,這些執行緒等待任務,一旦有任務,就執行緒自動執行任務.

執行緒的最佳數量 max_workers = (os.cpu_count() or 1) * 5

from concurrent.futures import threadpoolexecutor,processpoolexecutor #

執行緒非同步和程序非同步

#concurrent.futures 這個模組是非同步呼叫機制

#from multiprocessing import pool 這個模組既可以非同步也可以同步,

deffunc (num) :

sum =0

for i in

range(num) :

sum += i**2

print

(sum)

if__name__ == '

__main__':

p = threadpoolexecutor(10)

for n in range(100):

#p.submit(func , args=(n,))

p.submit(func , n)#

提交任務

p.shutdown()#

等效於程序池中的close+join 是指讓父執行緒等待池中所有程序執行完所有任務

如何把多個任務放入執行緒池

for + submit 的方式提交多個任務

map(func , iterable)方式去提交多個任務

通過程序池執行緒池的效率比較

不管是pool 的程序池還是processpoolexecutor() 的程序池,執行效率相當

threadpoolexecutor 的效率要差很多

所以當計算密集時,使用多程序.

執行緒返回值

用for + submit 方式提交多個任務,用result方法拿結果

from concurrent.futures import threadpoolexecutor,processpoolexecutor #

執行緒非同步和程序非同步

#concurrent.futures 這個模組是非同步呼叫機制

#from multiprocessing import pool 這個模組既可以非同步也可以同步,

deffunc (num) :

sum =0

for i in

range(num) :

sum += i**2

return

sumif

__name__ == '

__main__':

p = threadpoolexecutor(10)

re =

for n in range(100):

#p.submit(func , args=(n,))

r = p.submit(func , n)#

提交任務

#p.shutdown()#等效於程序池中的close+join 是指讓父執行緒等待池中所有程序執行完所有任務

[print(i.result()) for i in

re ]

#在pool 程序中那結果,用get方法 , 在threadpoolexecutor中拿結果使用result方法

用map的方式提交多個任務, 返回的是生成器物件,用__next__() 方法拿結果

**函式

執行緒池中的**函式是子執行緒呼叫的,和父執行緒沒有關係;

程序池中的**函式是父程序呼叫的,和子程序沒有關係.

協程

執行緒佇列,執行緒池,協程

執行緒的queue,類似於程序 作用也是類似,queue n 規範放入值的數量 這個和之前一樣是為了實現先進先出 import queue q queue.queue 2 括號內可加入數字規範放入值的數量,不加則不會規範 q.put 123 q.put qweqwe q.put 111 print ...

執行緒佇列 執行緒池 協程

1 執行緒佇列 from multiprocessing queue joinablequeue 程序ipc佇列 from queue import queue 執行緒佇列 先進先出 from queue import lifoqueue 後進先出的 方法都是一樣的 put get put nowa...

協程與執行緒

reference 協程不只在go語言中實現了,其實目前大部分語言都實現了自己的一套協程,包括c erlang python lua j ascript ruby等。相對於協程,你可能對程序和執行緒更為熟悉。程序一般代表乙個應用服務,在乙個應用服務中可以建立多個執行緒,而協程與程序 執行緒的概念不一...