Python之进程池【非阻塞式&阻塞式】(8)

非阻塞式:

(1)全部添加到队列中,立刻返回,并没有等待其他进程执行完毕;

(2)回调函数等待进程任务完成才调用;

from multiprocessing import Pool
import os
import time
from random import random

def task(task_name):
    print("开始做任务了!", task_name)
    start = time.time()
    # 休眠
    time.sleep(random())
    end = time.time()
    return "完成任务:{}!用时:{},进程id:{}".format(task_name, (end - start), os.getpid())

container = []
def callback_func(n):
    return container.append(n)


if __name__ == '__main__':
    pool = Pool(5)
    tasks = ["python1", "python2", "python3", "python4", "python5", "python6", "python7", "python8"]
    for task1 in tasks:
        pool.apply_async(task, args=(task1,), callback=callback_func)

    pool.close()
    pool.join()

    for c in container:
        print(c)

    print("结束!!!")

Python之进程池【非阻塞式&阻塞式】(8)_第1张图片

阻塞式:

(1)并没有体现进程的有点;

(2)添加一个执行一个,新的任务执行必须等待当前的任务完成;

from multiprocessing import Pool
import os
import time
from random import random


def task(task_name):
    print("开始做任务了!", task_name)
    start = time.time()
    # 休眠
    time.sleep(random())
    end = time.time()
    print("完成任务:{}!用时:{},进程id:{}".format(task_name, (end - start), os.getpid()))


if __name__ == '__main__':
    pool = Pool(5)
    tasks = ["python1", "python2", "python3", "python4", "python5", "python6", "python7", "python8"]
    for task1 in tasks:
        pool.apply(task, args=(task1,))
    pool.close()
    pool.join()
    print("结束!!!")

Python之进程池【非阻塞式&阻塞式】(8)_第2张图片

你可能感兴趣的:(编程/Python)