范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

python并发编程进程池

  在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。多进程是实现并发的手段之一,需要注意的问题是: 很明显需要并发执行的任务通常要远大于核数 一个操作系统不可能无限开启进程,通常有几个核就开几个进程 进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行)
  例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个…手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。
  我们就可以通过维护一个进程池来控制进程数目,比如httpd的进程模式,规定最小进程数和最大进程数..
  ps:对于远程过程调用的高级应用程序而言,应该使用进程池,Pool可以提供指定数量的进程,供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,就重用进程池中的进程。python中的进程池
  创建进程池的类:如果指定numprocess为3,则进程池会从无到有创建三个进程,然后自始至终使用这三个进程去执行所有任务,不会开启其他进程 1 Pool([numprocess  [,initializer [, initargs]]]):创建进程池
  参数介绍: 1 numprocess:要创建的进程数,如果省略,将默认使用cpu_count()的值 2 initializer:是每个工作进程启动时要执行的可调用对象,默认为None 3 initargs:是要传给initializer的参数组
  方法介绍:
  主要方法: p.apply(func [, args [, kwargs]]):在一个池工作进程中执行func(*args,**kwargs),然后返回结果。需要强调的是:此操作并不会在所有池工作进程中并执行func函数。如果要通过不同参数并发地执行func函数,必须从不同线程调用p.apply()函数或者使用p.apply_async() p.apply_async(func [, args [, kwargs]]):在一个池工作进程中执行func(*args,**kwargs),然后返回结果。此方法的结果是AsyncResult类的实例,callback是可调用对象,接收输入参数。当func的结果变为可用时,将理解传递给callback。callback禁止执行任何阻塞操作,否则将接收其他异步操作中的结果。     p.close():关闭进程池,防止进一步操作。如果所有操作持续挂起,它们将在工作进程终止前完成 P.jion():等待所有工作进程退出。此方法只能在close()或teminate()之后调用
  其他方法(了解部分) 方法apply_async()和map_async()的返回值是AsyncResul的实例obj。实例具有以下方法 obj.get():返回结果,如果有必要则等待结果到达。timeout是可选的。如果在指定时间内还没有到达,将引发一场。如果远程操作中引发了异常,它将在调用此方法时再次被引发。 obj.ready():如果调用完成,返回True obj.successful():如果调用完成且没有引发异常,返回True,如果在结果就绪之前调用此方法,引发异常 obj.wait([timeout]):等待结果变为可用。 obj.terminate():立即终止所有工作进程,同时不执行任何清理或结束任何挂起工作。如果p被垃圾回收,将自动调用此函数
  应用: apply同步执行:阻塞式from multiprocessing import Pool import os,time def work(n):     print("%s run" %os.getpid())     time.sleep(3)     return n**2  if __name__ == "__main__":     p=Pool(3) #进程池中从无到有创建三个进程,以后一直是这三个进程在执行任务     res_l=[]     for i in range(10):         res=p.apply(work,args=(i,)) #同步运行,阻塞、直到本次任务执行完毕拿到res         res_l.append(res)     print(res_l)apply_async异步执行:非阻塞from multiprocessing import Pool import os, time   def work(n):     print("%s run" % os.getpid())     time.sleep(3)     return n ** 2   if __name__ == "__main__":     p = Pool(3)  # 进程池中从无到有创建三个进程,以后一直是这三个进程在执行任务     res_l = []     for i in range(10):         res = p.apply_async(work, args=(i,))  # 同步运行,阻塞、直到本次任务执行完毕拿到res         res_l.append(res)      # 异步apply_async用法:如果使用异步提交的任务,主进程需要使用jion,等待进程池内任务都处理完,然后可以用get收集结果,否则,主进程结束,进程池可能还没来得及执行,也就跟着一起结束了     p.close()     p.join()     for res in res_l:         print(res.get())  # 使用get来获取apply_aync的结果,如果是apply,则没有get方法,因为apply是同步执行,立刻获取结果,也根本无需get
  发现:并发开启多个客户端,服务端同一时间只有3个不同的pid,干掉一个客户端,另外一个客户端才会进来,被3个进程之一处理
  回调函数:
  需要回调函数的场景:进程池中任何一个任务一旦处理完了,就立即告知主进程:我好了额,你可以处理我的结果了。主进程则调用一个函数去处理该结果,该函数即回调函数
  我们可以把耗时间(阻塞)的任务放到进程池中,然后指定回调函数(主进程负责执行),这样主进程在执行回调函数时就省去了I/O的过程,直接拿到的是任务的结果。 from multiprocessing import Pool import requests import os   def get_page(url):     print("<进程%s> get %s" % (os.getpid(), url))     respone = requests.get(url)     if respone.status_code == 200:         return {"url": url, "text": respone.text}   def pasrse_page(res):     print("<进程%s> parse %s" % (os.getpid(), res["url"]))     parse_res = "url:<%s> size:[%s] " % (res["url"], len(res["text"]))     with open("db.txt", "a") as f:         f.write(parse_res)   if __name__ == "__main__":     urls = [         "https://www.baidu.com",         "https://www.python.org",         "https://www.openstack.org",         "https://help.github.com/",         "http://www.sina.com.cn/"     ]      p = Pool(3)     res_l = []     for url in urls:         res = p.apply_async(get_page, args=(url,), callback=pasrse_page)         res_l.append(res)      p.close()     p.join()     print([res.get() for res in res_l])  # 拿到的是get_page的结果,其实完全没必要拿该结果,该结果已经传给回调函数处理了  """ 打印结果: <进程3388> get https://www.baidu.com <进程3389> get https://www.python.org <进程3390> get https://www.openstack.org <进程3388> get https://help.github.com/ <进程3387> parse https://www.baidu.com <进程3389> get http://www.sina.com.cn/ <进程3387> parse https://www.python.org <进程3387> parse https://help.github.com/ <进程3387> parse http://www.sina.com.cn/ <进程3387> parse https://www.openstack.org [{"url": "https://www.baidu.com", "text": "r ...",...}] """
  如果在主进程中等待进程池中所有任务都执行完毕后,再统一处理结果,则无需回调函数 from multiprocessing import Pool import time,random,os  def work(n):     time.sleep(1)     return n**2 if __name__ == "__main__":     p=Pool()      res_l=[]     for i in range(10):         res=p.apply_async(work,args=(i,))         res_l.append(res)      p.close()     p.join() #等待进程池中所有进程执行完毕      nums=[]     for res in res_l:         nums.append(res.get()) #拿到所有结果     print(nums) #主进程拿到所有的处理结果,可以在主进程中进行统一进行处理

N40系列智能手持终端心动来袭蓝畅科技推出了带物理按键的PDA,正合你的心意。蓝畅N40系列,4英寸的TN屏幕设计,机身仅仅300克。小屏幕结合舒适的九宫格物理按键设计,符合人体工学设计,上手轻便,十分实用。扫2021(第十九届)中国互联网经济论坛(iChina)年度品牌操作系统鸿蒙获奖理由西穷窅冥之党,东开鸿濛之先。走出舒适区,向未知领域探索,架构底层设计,方能行稳致远。鸿蒙的英文名HarmonyOS是和谐的意思,走前人未走的路,不是让别人无路可强力狙击三星?华为首款翻盖折叠机曝光外观很惊艳众所周知,华为准备在本月晚些时候发布一款名为华为50Pocket的新可折叠手机。根据该公司官方微博账户上的一篇帖子显示,华为50Pocket与之前的MateX系列折叠屏手机最大的不华为新机发布,5000mAh鸿蒙系统,售价不足1000长期以来华为都是国产手机中市场份额最大的一个品牌,尤其是麒麟芯片的加持使得华为在国内的高端手机市场地位也很高,所以华为的手机也是备受用户关注。然而,自从2019年老美开始对华为开启周深代言的iQOOneo5SSE发布!称霸中端?可能和你想的有差别接近年底,也许是上一代处理器压货太多,或许是新款处理器的到来,导致老款处理器成本降低,所以各个厂商开始低价发布上一代处理器的手机,前有MotoedgeS30把高通888plus处理龙竹科技获海关AEO高级认证享受全球互认海关VIP通道有助于竹吸管推广挖贝网12月20日消息,北交所上市公司龙竹科技(831445)近日获海关AEO高级认证,可享受全球互认海关提供的VIP通道和优惠待遇。公司称,该认证有助于主打新品缠绕式竹吸管在海外申通回应发顺丰处罚,解除合作近日,在吉林长春申通快递某站点,数人在分拣快件时随意抛扔的画面引发关注。涉事经开区二部工作人员告诉记者,他们每单十来块不敢保证质量,别说这个小承包区,转运中心给不给保都不知道,建议从薇娅逃税来看,我们应该实体为主,电商为辅,不能本末倒置一代电商代货大王薇娅被查,被罚偷税漏税13亿。13亿已经超过了50A股上市公司全年利润,即使是当年的范冰冰偷税8个亿也得黯然失色。按我国的税所比例,13亿的税收,相当于纯利润200国电电力首个省级污染防治技术创新中心建成12月15日,国家能源集团国电电力首个省级污染防治技术创新中心建成,通过河北省科技厅验收。该中心以世界首个基于实际燃煤烟气的50000立方米小时全流程烟气多污染物深度脱除创新平台和iPhone所有机型中,理性分析,买这三款不如买安卓很多人喜欢苹果手机,但是并不是所有的苹果手机都值得买。资本永远秉持利益至上的原则,因此有些机型完全是用来清库存或者是作为更好机型的过渡。这几款iPhone手机的机型不要购买。第一款为什么微信占用的内存这么大?手机内存越来越捉襟见肘了。微信越来越膨胀了。当软件开发者都想着围绕其打造一个所谓的全能生态圈的时候,软件的功能和容量的膨胀就变得不可避免,一如他们的贪欲,企图渗入和占据人们生活的方
提高手柄幸福感的小配件谷粒随心充手柄充电座最近休息,在家无聊就总是用谷粒的手柄打游戏,导致手柄总是要充电。但是我有时候又总是忘记充电,经常下一次玩的时候玩着玩着手柄就没电了,插着线玩呢,体验又非常不好。没办法,我只好买了个云南地震观测点的用电安全守护者卓文科技2020年11月,卓文科技的工作人员前往云南省地震局,为昆明市的多个地震观测点提供了一套完整的智慧用电方案以及保障观测点用电安全的产品智能微型断路器。卓文科技担任起了为地震观测点保云南又现输入病例!严防扩散,强烈建议公交仅限本地健康居民通行3月16日,云南昆明再增法国输入确认病例1例,密切接触者20人被隔离!3月16日云南卫健委官方疫情通报因近期国外疫情爆发,而日均入境人员达12万,国内抗疫压力大增。为严防输入病例扩如果有漂亮小姐姐教你月入上万,你可要注意了现在在知乎,小红书,抖音上有很多漂亮的小姐姐,教你月入上万,动不动就是听歌能赚钱,走路能赚钱,做自媒体能赚钱,要不就是这个月月入5000元,要不就是今年做自媒体存了7位数,看了这些CIO以领航员副领航员工程师的身份引领数字化转型多年来,CIO的角色已经从战略价值交付领导者转变为新业务的共同创造者。这种转变正使得导致C级高管之间的步调越来越一致,并使CIO有机会站在数字化转型的最前线。对于所有行业的CIO都前端css学习实现图片动画剪辑的一些简单的效果(代码)实现效果视频链接前端css学习实现图片动画剪辑的一些简单的效果httpswww。ixigua。comi7008117700752835104代码!DOCTYPEhtmlhtmlla天眼查申请查公司查老板查关系商标被驳!广告注册商标难?天眼查,目前是国内使用率和知名度都非常高的一款查企业信息的软件,其最知名的一句广告词查公司,查老板,查关系是很多人对于这款软件的第一印象。2017年5月,天眼查以查公司,查老板,查茶行业私域流量运营入门云茶姐姐茶融媒培训课程第7期一起学习,一起创业云茶姐姐创业就业服务平台项目介绍云茶有两个含义,一是产自云南的茶,常用于代表普洱茶,二是云上的茶,表示互联网茶的产业经营模式。云茶姐姐是云南仰视人生品牌管理有限公不惧炎热夏日装机新选择,XPG入侵者ampampamp季风系列温柔台风评测近些年越来越多的硬件厂商开始玩起了跨界,这其中有我们熟知的华硕恩杰,也有今天我们要介绍的威刚。威刚是我们熟知的内存和存储行业的大佬,近年来也推出了机箱电源和散热器相关产品,今天我们2022款雪佛兰科鲁泽,美丽的外表是你喜欢的款吗?近日,2022款雪佛兰科鲁泽正式在中国车市推出。新车本次共计推出5个配置版本车型,并且全系车型均为自动挡,不再提供手动挡车型。外观方面,新车几乎完全与老款车保持一致,并提供了普通版只是网页没有声音了咋回事?其它地方都正常有声音大家没有遇到过这种问题,在网页上看视频的时候发现没有声音了,即使把音量已调到最大,也没有设为静音,但是其它地方声音都正常!唯独网页没声音,看看我是怎么解决的吧!(以Win7为例)1