python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...
1、
2、 為啥要有?進程池和線程池
進程池來控制進程數目,比如httpd的進程模式,規定最小進程數和最大進程數
3、創建進程池的類pool
如果指定numprocess為3,則進程池會從無到有創建三個進程,然后自始至終使用這三個進程去執行所有任務,不會開啟其他進程
pool([numprocess [,initializer [, initargs]]]):創建進程池
參數介紹:
numprocess:要創建的進程數,如果省略,將默認使用cpu_count()的值
initializer:是每個工作進程啟動時要執行的可調用對象,默認為none
initargs:是要傳給initializer的參數組
方法介紹:
主要方法:
p.apply(func [, args [, kwargs]])
在一個池工作進程中執行func(*args,**kwargs),然后返回結果。
需要強調的是:此操作并不會在所有池工作進程中并執行func函數。如果要通過不同參數并發地執行func函數,必須從不同線程調用p.apply()函數或者使用p.apply_async()
p.apply_async(func [, args [, kwargs]])
在一個池工作進程中執行func(*args,**kwargs),然后返回結果。此方法的結果是asyncresult類的實例,callback是可調用對象,接收輸入參數。
當func的結果變為可用時,將理解傳遞給callback。callback禁止執行任何阻塞操作,否則將接收其他異步操作中的結果。
p.close()
關閉進程池,防止進一步操作。如果所有操作持續掛起,它們將在工作進程終止前完成
p.jion()
等待所有工作進程退出。此方法只能在close()或 teminate()之后調用
4、進程池和線程池
from concurrent.futures import threadpoolexecutor, processpoolexecutor
import time
import os
# pool = threadpoolexecutor(5) # 池子里面固定只有五個線程
# 括號內可以傳數字 不傳的話默認會開設當前計算機cpu個數五倍的線程
pool = processpoolexecutor(5)
# 括號內可以傳數字 不傳的話默認會開設當前計算機cpu個數進程
"""
池子造出來之后 里面會固定存在五個線程
這個五個線程不會出現重復創建和銷毀的過程
池子造出來之后 里面會固定的幾個進程
這個幾個進程不會出現重復創建和銷毀的過程
池子的使用非常的簡單
你只需要將需要做的任務往池子中提交即可 自動會有人來服務你
"""
def task(n):
print(n,os.getpid())
time.sleep(2)
return n**n
def call_back(n):
print('call_back>>>:',n.result())
"""
任務的提交方式
同步:提交任務之后原地等待任務的返回結果 期間不做任何事
異步:提交任務之后不等待任務的返回結果 執行繼續往下執行
返回結果如何獲取???
異步提交任務的返回結果 應該通過回調機制來獲取
回調機制
就相當于給每個異步任務綁定了一個定時炸彈
一旦該任務有結果立刻觸發爆炸
"""
if __name__ == '__main__':
# pool.submit(task, 1) # 朝池子中提交任務 異步提交
# print('主')
t_list = []
for i in range(20): # 朝池子中提交20個任務
# res = pool.submit(task, i) #
res = pool.submit(task, i).add_done_callback(call_back)
# print(res.result()) # result方法 同步提交
# t_list.append(res)
# 等待線程池中所有的任務執行完畢之后再繼續往下執行
# pool.shutdown() # 關閉線程池 等待線程池中所有的任務運行完畢
# for t in t_list:
# print('>>>:',t.result()) # 肯定是有序的
"""
程序有并發變成了串行
任務的為什么打印的是none
res.result() 拿到的就是異步提交的任務的返回結果
"""
參考資料:
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的原生数据类型_Java中的8种
- 下一篇: python图像锐化_Python图像处