zoukankan      html  css  js  c++  java
  • Python之multiprocessing.Pool(创建多个子进程)

    • 当需要创建的子进程数量不多的时候可以直接利用multiprocessing中的Process动态生成多个进程。但是,如果是成百上千个任务,手动创建显然不合适,此时就可以用multiprocessing下的Pool类完成。
    • 初始化Pool时,可以指定一个最大的进程数,当有新的请求提交到Pool中时,如果池子还没有满,(即对进程进行有效的管理)那么会创建一个新的进程来执行该请求,如果进程数达到最大数量时,再请求时就会等待Pool中有空余进程可用,直到池中有进度结束,才会创建新的进程来执行,类似停满的停车场
    from multiprocessing import Pool import time,os,random #定义一个函数
    def download(i): 
        print('%d--ID号为:%d的进程开始执行'%(i,os.getpid())) 
        t_start=time.time() #time.sleep(2)
        time.sleep(random.random()*10) 
        t_stop=time.time() print('%d--ID:%d执行完毕,耗时:%f秒'%(i,os.getpid(),t_stop-t_start)) 
    if __name__=='__main__': 
        po=Pool(3)#定义一个进程池,最大进程数量
        for i in range(10):#假设有10个文件要下载
            #同步,自加阻塞
            po.apply(func=download,args=(i,))
            #将请求放进进程池中执行,属于阻塞式请求,一个进程执行完毕后才会执行第二个进程
            # 不能体现同时处理三个三个请求
            #也就是不能体现并发
            #每次循环将会用空闲出来的子进程去调用任务---异步
            # po.apply_async(func=download,args=(i,))#异步体现并发,三个进程都在执行任务,其中一个执行完毕后,下一个补上继续执行
        print('----start-----') #调用join之前,先调用close函数,否则会出错。
        po.close()#关闭进程池,关闭后就不再接受新的请求,即开始执行任务。
        po.join()## join函数等待所有子进程结束,才会执行主进程之后的代码
        print('-----end------')
    
  • 相关阅读:
    火狐优化及遇到的问题
    拷贝工程,名字不改变问题
    Ajax基础实例
    Java中检测字符串的编码格式
    innerHTML和outerHTML有什么区别
    启动Tomcat出现“Bad version number in .class file (unable to load class XXX)”解决
    MyEclipse8.6安装SVN 教程 与遇到的问题
    彻底卸载JDK的-并只依赖配置环境安装JDK(不依赖注册表)-解决Error opening registry key'softwareJavasoftJava Runti问题
    数据库下的分页代码
    WSGI
  • 原文地址:https://www.cnblogs.com/yuhaohao/p/9797672.html
Copyright © 2011-2022 走看看