进程池:
可以指定一个最大进程数,当有新的请求提交到进程池中。
如果池中的进程数还没有满,那么就会创建一个新的进程用来执行该请求。
如果池中的进程数满了,该请求就会等待,直到进程池中的进程结束,才会使用这个结束的进程来执行新的任务。
作用:限制并发程序的数量,并简易创建程序的步骤。
方法:
multiprocessing.Pool.apply_async(func=def,args=([,],))
func=所调用的函数
args=向函数中传递的参数,多个参数用元祖表示。
创建时进程池括号中的数字表示并发的数量,也就是同一时刻进程池中的进程数。
import time
from multiprocessing import Process,Queue,Pool
def foo(i):
print('i1的值是:',i)
time.sleep(3)
print('end...')
def foo2(i):
print('i2的值是:',i)
time.sleep(3)
print('end...')
if __name__=='__main__':
pool=Pool(3)#创建进程池对象
for i in range(5):
pool.apply_async(func=foo,args=(i,))#将任务添加到进程池里
pool.apply_async(func=foo2,args=(i,))
pool.close()#关闭进程池,等待所有进程结束才关闭进程池
pool.join()#主进程等待所有子进程执行完毕后主进程才往下执行,必须在close后面
pool.close() 关闭进程池,等待所有进程结束才关闭进程池。
pool.join() 主进程等待所有子进程执行完毕后再执行此行之后的代码。必须写在close后面。
并发:同一时刻一个程序一对一,一个CPU;同一时段多程序对一个CPU争夺。Python是单核运行,所以程序都是并发的。
并行:同一时刻多程序一对一多个CPU运行。