程序1
from multiprocessing import Pool
import time
from random import random
import os
#阻塞式进程
def task(task_name):
print('开始做任务了!',task_name)
start = time.time()
#使用sleep
time.sleep(random()*2)
end = time.time()
print('完成任务:{}!用时:{},进程ID:{}'.format(task_name, (end - start), os.getpid()))
# return '完成任务:{}!用时:{},进程ID:{}'.format(task_name,(end - start),os.getpid())
# container = []
#
# def callback_func(n):
# container.append(n)
#
if __name__ == '__main__':
pool = Pool(5)
tasks = ['听音乐','吃饭','洗衣服','打游戏','散步','看孩子','读书','做饭']
for task1 in tasks:
pool.apply(task,args = (task1,))
pool.close() #添加任务结束
pool.join() #
print('over!!!!!!!')
结果1
开始做任务了! 听音乐
完成任务:听音乐!用时:1.3294446468353271,进程ID:8768
开始做任务了! 吃饭
完成任务:吃饭!用时:1.1084485054016113,进程ID:9416
开始做任务了! 洗衣服
完成任务:洗衣服!用时:0.22160625457763672,进程ID:5820
开始做任务了! 打游戏
完成任务:打游戏!用时:0.27808260917663574,进程ID:16932
开始做任务了! 散步
完成任务:散步!用时:1.8780441284179688,进程ID:1952
开始做任务了! 看孩子
完成任务:看孩子!用时:0.2119889259338379,进程ID:8768
开始做任务了! 读书
完成任务:读书!用时:1.2344746589660645,进程ID:9416
开始做任务了! 做饭
完成任务:做饭!用时:1.924525499343872,进程ID:5820
over!!!!!!!
发现结果前五个进程号ID都不一样,到第六个开始和前面重复
进程池阻塞式的特点:
添加一个任务执行一个任务,如果一个任务不结束,另外一个任务进不来。
(每个客户享受贵宾级待遇)
进程池:
pool= pool(max) 创建进程池对象
pool.apply() 阻塞的
pool.apply_async() 非阻塞的
pool.close()
pool.join()让主进程让步