#!/usr/bin/env python3
-- coding: utf-8 -
**
‘’'Python中进程关于非堵塞的含义举例
List item
**
1*非阻塞:*全部添加到队列中,;立即返回,如果一个进程做完了就再添加一个,并没有与等待其他的进程完毕,但是回调函数是等待所有的任务完成之后才调用
2阻塞:(没有体现进程的优点),添加一个执行一个,如果一个任务不结束则另一个任务就进不来
3 进程池:
pool =Pool(max)
poo.apply_async() #非阻塞的
pool.apply() #阻塞的
(2):
pool.close #进程池添加完毕,之后需要写的一个东西
pool.jion() #如果要进行子进程需要写的一个,如果不行,就只能进行主进程,不能进行子进程
让主进程让步,为子进程可以执行,(相当于插队,让子进程先做,然后主进程再做)
‘’’
‘’’
1首先是非阻塞(举例)
‘’’
from random import random
import os
from multiprocessing import Process
from multiprocessing import Pool
import time
def task(task_name):
print('开始做任务,',task_name)
start = time.time()
#使用sleep
time.sleep(random() * 2)
end =time.time()
#os.getpid(),用来显示出分配当前进程的数字序号
return '完成任务{},用时是{},进程序号是{}'.format(task_name,(end - start),os.getpid())
container =[]
#定义一个回调函数:
def callback_back(n):
container.append(n)
if __name__ =='__main__':
pool = Pool(4)
plan = ['学习','睡觉','做饭','玩游戏','看电视','吃饭']
for i in plan:
pool.apply_async(task,args=(i,),callback=callback_back)
pool.close() #添加任务结束
pool.join() #在主进程中插队,使得可以进行子进程
for i in container:
print(i)
print('结束')