日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...

發布時間:2023/12/2 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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并发编程(六)补充—进程池和线程池...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。