多進(jìn)程:Python中提供multiprocess模塊實(shí)現(xiàn)多進(jìn)程并發(fā)
import multiprocessing
import time
def worker():
number = 0
for i in range(10000000):
number += 1
time.sleep(0.1)
print(multiprocessing.current_process().name) # 獲取當(dāng)前進(jìn)程的名稱
print('循環(huán)次數(shù):{} number:{}'.format(i+1,number ))
if __name__ == '__main__':
for i in range(4):
process = multiprocessing.Process(target=worker, name='process worker {}'.format(i))
process.start()
print(process.pid) # 獲取進(jìn)程的pid
print(process.exitcode) # 獲取退出狀態(tài)碼
print(process.name) # 獲取進(jìn)程名稱
time.sleep(30)
print(process.terminate()) # 終止進(jìn)程
進(jìn)程并發(fā):concurrent模塊
雖然multiprocess模塊有一個(gè)Pool類恍风,但是一般而言,用的多的還是ProcessPoolExecutor,異步進(jìn)程池
pool的對(duì)象方法
①:submit()
②:map()
③:shutdown(): 清理進(jìn)程池
submit()方法的返回值future對(duì)象的方法
①:result():查看調(diào)用的返回結(jié)果
②:done():如果任務(wù)成功執(zhí)行或任務(wù)取消返回True
③:cancel():取消任務(wù)
④:running(): 如果任務(wù)正在執(zhí)行返回True
⑤:exception(): 獲取執(zhí)行拋出的異常
from concurrent.futures import ProcessPoolExecutor
import requests
def fetch_url(url):
result = requests.get(url=url, )
return result.text
if __name__ == '__main__':
# 創(chuàng)建10個(gè)線程隊(duì)列的線程池
pool = ProcessPoolExecutor(10)
# 獲取任務(wù)返回對(duì)象
a = pool.submit(fetch_url, 'http://www.yuxiaokeji.cn')
b = pool.submit(fetch_url, 'http://www.yuxiaokeji.cn')
# 取出返回的結(jié)果
x = a.result()
y = b.result()
print(x)
print(y)
使用上下文管理
if __name__ == '__main__':
with ProcessPoolExecutor(max_workers=10) as pool:
a = pool.submit(fetch_url, 'http://www.yuxiaokeji.cn')
print(a.result())