天天看点

python - 进程池 multiprocessing.Pool的简单使用

import multiprocessing
import time
from queue import Queue

qurl = Queue()


def func(msg):
    print("msg:", msg)
    time.sleep(3)
    print("end")


def make_data():
    for i in range(10):
        qurl.put(i)
    print('------ qurl.qsize() = ', qurl.qsize())


def custom():
    pool = multiprocessing.Pool(processes=5)
    while not qurl.empty():
        data = qurl.get()
        print('--- data = ', data)
        pool.apply_async(func, (data,))  # 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
    pool.close()
    pool.join()  # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束


if __name__ == "__main__":
    start_time = time.time()
    make_data()
    print('make_data_end')
    custom()
    print('all task consum time = ', time.time() - start_time)