python 程式池

馬超_發表於2017-12-20
import multiprocessing
import time
import random
import os


def worker(msg):
    t_start = time.time()
    print("%s開始執行,程式號為%d" % (msg,os.getpid()))
    # random.random()隨機生成0~1之間的浮點數
    time.sleep(random.random()*2)
    t_stop = time.time()
    print(msg,"執行完畢,耗時%0.2f" % (t_stop-t_start))


if __name__ == '__main__':
    # 1 建立程式池
    pool = multiprocessing.Pool(3)

    # 2 新增任務 ---> 兩種
    # apply新增任務的方式  阻塞的任務新增方式 任務新增到程式池中的程式中執行 
    # 會阻塞等待任務執行完成 才會繼續往下執行
    pool.apply(func=worker, args=('000',))
    pool.apply(func=worker, args=('111',))

    # 非阻塞的任務新增方式  把任務新增到程式中執行 不阻塞等待任務執行完成
    pool.apply_async(func=worker, args=('222',))
    pool.apply_async(func=worker, args=('333',))
    # 主程式一旦退出 就會導致所有的任務《子程式 不是通過繼承的方式建立出來的》全部結束 

    # 3 關閉程式池-不再允許新增任務
    # pool.close()

    # 3 直接終止所有正在執行的子程式
    pool.terminate()

    # 4 等待所有任務執行完成
    pool.join()
複製程式碼

相關文章