千锋教育-做有情怀、有良心、有品质的IT职业教育机构

Python培训入门知识之进程池与线程池

时间:2018-04-16 15:04:44  |  来源:千锋教育郑州校区  |  作者:

   进程和线程编程语言中常见的知识点,Python作为人工智能时代常用的编程语言中也涉及进程和线程的内容,很多参加Python培训机构的学员在学习之初都会学习进程池和线程池,今天小编就来给大家普及一下这些知识点。

  进程池

  进程池是资源进程、管理进程组成的技术的应用。Python中,进程池内部会维护一个进程序列。当需要时,程序会去进程池中获取一个进程。如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止。

图片1.png

  进程池中的子进程运行着相同的代码、具有相同的属性,每个属性都相对“干净”,即它们没有打开不必要的文件描述符、也不会错误的使用大块的堆内存(从父进程继承复制而来)。

  在进程池中,主进程使用某种算法来主动选择子进程,主进程和所有子进程通过一个共享的工作队列来实现同步。主进程除了选择好子进程以外,还需要使用某种通知机制来告诉目标子进程有新任务需要处理,并传递必要的数据。

  进程池如何唤醒自己相应的子进程?使用的epoll监听事件。首先确定自己要监听子进程的什么事件然后再注册事件;使用run_child函数去跑第i个子进程,然后再主函数中通过for(epoll_wait返回的是活跃客户端的个数)对活跃的事件进行一一处理;用进程池存放好子进程的pid和管道,有新的链接来的时候就使用池子里的子进程去完成操作。

  线程池

  线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务,线程池线程都是后台线程。

  对于任务数量不断增加的程序,每有一个任务就生成一个线程,终会导致线程数量的失控;而每启动一个线程就会生成一个链接,作为新任务就要为这些新的链接生成新的线程,线程数量暴涨。在之后的运行中,线程数量还会不停的增加,完全无法控制。所以,对于任务数量不端增加的程序,固定线程数量的线程池是必要的。

<a href=http://zz.mobiletrain.org/ target=_blank class=infotextkey>郑州python培训</a>课程.png

  如何操作进程池和线程池?

  1、Executor。Executor是一个抽象类,它不能被直接使用。但是它提供的两个子类ThreadPoolExecutor和ProcessPoolExecutor却分别被用来创建线程池和进程池的代码。

  2、Future。它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threading和multiprocessing的进一步抽象,对编写线程池/进程池提供了直接的支持。

  3、submit。使用submit方法来往线程池中加入一个task,submit返回一个Future对象,对于Future对象可以简单地理解为一个在未来完成的操作。

  4、map/wait。map是按照URLS列表元素的顺序返回的,并且写出的代码加简洁直观;wait方法接会返回一个tuple(元组),tuple中包含两个set(集合),一个是completed(已完成的),另外一个是uncompleted(未完成的)。使用wait方法的一个优势就是获得大的自由度。

  如果你想成为满足企业需要的Python工程师,如果你想熟练掌握Python基础知识并积累较多的实战经验,建议你参加千锋郑州python培训班。千锋Python培训以行业为导向,紧抓企业痛点设计课程大纲,内容覆盖爬虫新技术、所有类型数据库以及机器学习案例优化,让你扎扎实实学技术,轻轻松松拿!

新开班

  • ▪ JavaEE培训班 06.11 抢座
  • ▪ Python培训班 05.28 抢座
  • ▪ HTML5培训班 05.14 抢座
  • ▪ JavaEE培训班 05.02 抢座
  • ▪ Python培训班 04.16 开班
  • ▪ UI交互设计培训 05.02 抢座
  • ▪ HTML5培训班 04.09 开班
  • ▪ Python培训班 03.26 开班
  • ▪ HTML5培训班 03.12 爆满
  • ▪ JavaEE培训班 03.26 开班
  • 郑州地址:郑州市二七区航海中路60号海为科技园C区10层、12层
    咨询电话:0371-55911950 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 北京天丰利校区:北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术广场服务楼2层、南区服务楼2层
    咨询电话:400-654-7778 010-82790226-801
    面授课程:iOS培训、Android培训、HTML5培训、UI培训、PHP培训、JavaEE培训、好程序员
  • 深圳科技园校区:深圳市南山区科苑南路高新技术产业园R3-B栋5层
    深圳大学城校区:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    深圳西部硅谷校区:深圳市宝安区宝安大道5010号西部硅谷B座A605-619
    咨询电话:0755-86681178/9-801
    面授课程:iOS培训、Android培训、HTML5培训、UI培训、PHP培训、JavaEE培训、好程序员
  • 上海地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-627-7899 021-65025129-602
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训、好程序员
  • 成都旅游校区:成都市一环路西二段17号四川旅游青羊校区内
    成都华立校区:成都一环路西二段17号华立大厦3楼
    咨询电话:028-83178771 028-61967740
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训、UI课程培训
  • 广州地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:020-22119207 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 大连地址:大连市甘井子区软件园路2号B8座二楼
    咨询电话:0411-39026086 400-654-7778
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 武汉地址:武汉市东新区光谷大道77号金融港B26栋9楼
    咨询电话:027-59905909 027-59905908 027-59905902
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 西安南二环校区:西安市二环南路西段60号永安大厦4层
    西安科技园校区:西安市雁塔区高新六路52号立人科技园C座西区4层
    咨询电话:029-85260160 029-85261030 029-85260960
    面授课程:iOS课程培训、Android课程培训、HTML5课程培训
  • 杭州地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:0571-86893632 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训
  • 青岛校区地址:青岛市市南区金坛路17号青岛职业技术南校区实训楼A4层
    咨询电话:0532-80910752/3 010-82790226/7-801
    面授课程:iOS课程培训、Android课程培训、UI课程培训
  • 千锋教育微信号
    扫描加好友