佇列 (同乙個程序內的佇列 , 多執行緒)
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
(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 #用map的方式提交多個任務, 返回的是生成器物件,用__next__() 方法拿結果執行緒非同步和程序非同步
#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方法
**函式
執行緒池中的**函式是子執行緒呼叫的,和父執行緒沒有關係;
程序池中的**函式是父程序呼叫的,和子程序沒有關係.
協程
執行緒佇列,執行緒池,協程
執行緒的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等。相對於協程,你可能對程序和執行緒更為熟悉。程序一般代表乙個應用服務,在乙個應用服務中可以建立多個執行緒,而協程與程序 執行緒的概念不一...