7.18python進程池

 
 

主要方法  經常使用的就是   from multiprocessing import Poolpython

 
 

map() 同步編程

 
 

apply() 同步app

 
 

apply_async()  異步  手動 close()  join()   學的逐漸的由淺入深異步


#
!/usr/bin/env python # !--*--coding:utf-8 --*-- # !@Time :2018/7/18 16:44 # !@Author TrueNewBee # 爲何會有進程池的概念 # 效率 # 每開啓進程,開啓屬於這個進程的內存空間 # 寄存器 堆棧 文件 # 進程過多 操做系統的調度 # 進程池 # python中的 先建立一個屬於進程的池子 # 這個池子指定能放多少個進程 # 先將這些進程建立好 # 更高級的進程池 # 能夠根據用戶需求改變進程數量 # 自帶join方法,裏面是異步 # map(func,range) 裏面傳入的參數只能傳入可迭代的 range ,列表,字典等 import time from multiprocessing import Pool, Process def func(n): for a in range(10): print(n+1) if __name__ == '__main__': start = time.time() pool = Pool(5) # 5個進程 pool.map(func, range(100)) # 100個任務 異步 t1 = time.time() - start p_list = [] for i in range(100): p = Process(target=func, args=(i, )) p_list.append(p) p.start() for i in p_list:p.join() t2 = time.time()-start print(t1, t2)
# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time    :2018/7/18 20:29
# !@Author   TrueNewBee

# apply() 方法爲同步的
# apply_async() 方法爲異步的 通常都是用這個
import time
import os
from multiprocessing import Pool


def func(n):
    print('start func%s' % n, os.getpid())
    time.sleep(1)
    print('end func%s' % n, os.getpid())


if __name__ == '__main__':
    p = Pool(5)
    for i in range(10):
        # p.apply(func, args=(i, ))     # 該方法爲同步的
        p.apply_async(func, args=(i,))  # 該方法爲異步的
    # 使用apply_async 必須加的兩句話
    p.close()   # 結束進程接收任務
    p.join()    # 感知進程池中的任務執行結束
# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time    :2018/7/18 21:05
# !@Author   TrueNewBee

# p = Pool()
# p.map(funcName, iterable)     默認異步的執行任務,且自帶close和join
# p.apply 同步調用的
# p.apply_async 異步調用 和主進程徹底異步 須要手動close 和join
import time
from multiprocessing import Pool


def func(i1):
    time.sleep(0.5)
    return i1*i1


if __name__ == '__main__':
    p = Pool()
    # res_list = []   # 儲存res對象 到後面一塊被接收
    # for i in range(10):
    #     res = p.apply_async(func, args=(i, ))   # apply_async的結果就是func的返回值
    #     res_list.append(res)
    #     # res.get()    # get() 等着func的計算結果,阻塞了(同步)
    # for res in res_list:
    #     print(res.get())   # 每五個返回一次數據 讓get()變成了異步

    # map()
    ret = p.map(func, range(100))
    print(ret)  # 總體返回全部數據
# !/usr/bin/env python
# !--*--coding:utf-8 --*--
# !@Time    :2018/7/18 21:06
# !@Author   TrueNewBee
# 回調函數
import os
from multiprocessing import Pool


def func1(n):
    print('in func1',os.getpid())
    return n*n


def func2(nn):
    print('in func2', os.getpid())
    print(nn)


if __name__ == '__main__':
    print('主進程:', os.getpid())  # 回調函數在主進程中執行的
    p = Pool(5)
    for i in range(10):
        p.apply_async(func1, args=(10, ), callback=func2)  # 回調func2返回值編程參數傳給func1
    p.close()
    p.join()
相關文章
相關標籤/搜索