龙空技术网

python的阻塞式进程pool.apply

厚积薄发爱python 173

前言:

目前咱们对“pythonpoolapply”可能比较着重,你们都想要知道一些“pythonpoolapply”的相关内容。那么小编也在网上搜集了一些有关“pythonpoolapply””的相关文章,希望姐妹们能喜欢,大家快快来学习一下吧!

1、pool.apply()方法是阻塞的,就是等待当前子进程执行完毕后,在执行下一个进程。首先主进程开始运行,碰到子进程,操作系统切换到子进程,等待子进程运行结束后,在切换到另外一个子进程,直到所有子进程运行完毕。然后在切换到主进程,运行剩余的部分。

2、poll.join()前必须用poll.close()方法。

代码运行如下:

from multiprocessing import Processfrom multiprocessing import Poolimport osdef task(taskname): #定义任务函数task print("开始做任务,任务名称是:{},任务进程号码是:{},父进程号是:{}".format(taskname,os.getpid(),os.getppid()))container=[]def callback_func(n): container.append(n)if __name__=='__main__': #相当于本py文件被引用时,下面的代码不会自动被执行 pool=Pool(7) #设置7个进程池 tasks=["唱歌","跳舞","打台球","打足球","打羽毛球"] #设置任务列表 for task1 in tasks: #遍历任务列表tasks里的任务task1 pool.apply(task,args=(task1,)) #阻塞式进程,返回被进程调用任务task1的返回值 pool.close() # 关闭进程池,表示不能在往进程池中添加进程 pool.join() # 等待进程池中的所有进程执行完毕,必须在close()之后调用 print("进程执行完毕") #进程池结束后,打印进程执行完毕

代码运行如下:

开始做任务,任务名称是:唱歌,任务进程号码是:13604,父进程号是:9620

开始做任务,任务名称是:跳舞,任务进程号码是:3236,父进程号是:9620

开始做任务,任务名称是:打台球,任务进程号码是:9812,父进程号是:9620

开始做任务,任务名称是:打足球,任务进程号码是:2948,父进程号是:9620

开始做任务,任务名称是:打羽毛球,任务进程号码是:13604,父进程号是:9620

进程执行完毕

图片示例如下:

标签: #pythonpoolapply