多进程:

(1) 前面我们学习的多线程,其实算不上真正的多线程,即使你开了很多个线程,在同一时间内只能有一个CPU核数来处理一个线程
(2) 在 python 中,多进程算得上是真正的多线程,假设你的CPU有四核,如果开四个子进程,四个CPU核数会同时处理这四个子进程
(3) 在 threading 中,我们是通过 threading.Thread(target=function, args=(....)) 来创建一个对象,然后再通过对象的 start() 方法来运行一个子线程,多个子线程可以并发执行
(4) 在 multiprocessing 中,我们是通过 multiprocessing.Process(target=function, args=(....)) 来创建一个对象,然后再通过对象的 start() 方法来运行一个子进程,多个子进程可以并发执行

#!/usr/bin/env python
#-*- coding:utf-8 -*- import os
import time
import multiprocessing def fun():
print 'hello world', os.getpid(), os.getppid()
time.sleep(1) for i in range(10):
p = multiprocessing.Process(target=fun, args=())
p.start()
[root@localhost ~]$ python 1.py
hello world 4056 4055
hello world 4057 4055
hello world 4058 4055
hello world 4059 4055
hello world 4060 4055
hello world 4061 4055
hello world 4062 4055
hello world 4063 4055
hello world 4064 4055
hello world 4065 4055

multiprocessing 进程池:

(1) 当我们只需要几个或十几个多进程时,可以用 multiprocessing.Process() 来创建,但如果我们需要几百或几千个子进程同时并发运行时还用这种方法就不可取了
(2) 我们可以创建一个进程池,进程池会自动创建一个新的子进程来执行请求,multiprocessing 提供了 Pool 这个类来实现创建进程池
(3) 进程池里可以设置最大可创建的子进程数,当有新的请求提交到 pool 中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;
(4) 但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。

pool = multiprocessing.Pool(processes=4)    创建一个进程池,processes 可以指定进程池里可以创建的最大子进程数,设置成跟CPU核数一致即可
    pool.apply_async(func=...., args=(....))    向进程池提交请求,进程池会自动创建一个新的进程来处理该请求,如果提交的请求超过最大可创建的进程数就会被阻塞,处于等待状态
    pool.close()    关闭进程池,会等待池中的请求执行完才关闭
    pool.terminate()    关闭进程池,会直接关闭,即使池中还有请求在执行
    pool.join()    阻塞主进程,防止子线程还没执行完程序就退出了,必须用在 pool.close() 后面

#!/usr/bin/env python
#-*- coding:utf-8 -*- import os
import time
import multiprocessing def hello():
print 'hello world', time.ctime()
time.sleep(1) if __name__ == '__main__':
pool = multiprocessing.Pool(processes=2)
for i in range(6):
pool.apply_async(func=hello, args=())
pool.close()
pool.join()
print 'Done!'
[root@localhost ~]$ vim 1.py
[root@localhost ~]$ python 1.py
hello world Tue Jan 29 05:27:45 2019
hello world Tue Jan 29 05:27:45 2019
hello world Tue Jan 29 05:27:46 2019
hello world Tue Jan 29 05:27:46 2019
hello world Tue Jan 29 05:27:47 2019
hello world Tue Jan 29 05:27:47 2019
Done!

多进程模块:multiprocessing的更多相关文章

  1. Python并发复习3 - 多进程模块 multiprocessing

    python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiprocessing,只需要定 ...

  2. 多进程模块 multiprocessing

    由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程. multiprocessing包是Python中的多进程 ...

  3. 关于python中的多进程模块multiprocessing

    python中的multiprocessing是一个多进程管理包,主要作用也就是提供多进程,而不是多线程,在其中用的比较多估计也就是Process和Pipe两个类,如下代码所示: #!/usr/bin ...

  4. 多进程模块multiprocessing的使用

    该模块提供如下功能: 建立并管理运行指定函数的子进程 基本接口: 1 Process(group, target, name, args[, kwargs]): 初始化子进程对象 2 p.daemon ...

  5. python学习笔记——multiprocessing 多进程模块Process

    系统自带的fork模块创建的多进程是基于Linux或Unix平台的,而window平台并不支持: python中的multiprocess为跨平台版本的多进程模块,支持子进程.通信和共享数据.执行不同 ...

  6. python multiprocessing多进程模块

    原文:https://blog.csdn.net/CityzenOldwang/article/details/78584175 多进程 Multiprocessing 模块 multiprocess ...

  7. python笔记9 线程进程 threading多线程模块 GIL锁 multiprocessing多进程模块 同步锁Lock 队列queue IO模型

    线程与进程 进程 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成.我们编写的程序用来描述进程要完成哪些功能以及如何完成:数据集则是程序在执行过程中所需要 ...

  8. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  9. Python多进程库multiprocessing中进程池Pool类的使用[转]

    from:http://blog.csdn.net/jinping_shi/article/details/52433867 Python多进程库multiprocessing中进程池Pool类的使用 ...

  10. 多进程(multiprocessing module)

    一.多进程 1.1 多进程的概念 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好 ...

随机推荐

  1. dp之区间:最大k乘积

    题目:给你一个n(1<=n<=15)位数,求将它分成m段,用m-1个*连接起来的最大乘积....... 思路:定义dp[i][j]为将前i位数分成j段的最大乘积,那么dp[i][j]==m ...

  2. c#打印(转)

    柴门闻狗吠,风雪夜归人.野旷天低树,江清月近人.香雾云鬟湿,清辉玉臂寒.莫愁前路无知己,天下谁人不识君.常将冷眼 看螃蟹,看你横行到几时.要在vs2005中实现最基本的打印文本基本上需要以下几个步骤 ...

  3. PostMessage与PostThreadMessage的差别

    消息队列是属于线程的,Post消息就是把消息放到目标线程的消息队列中. 这两者的差别在于: PostMessage 通过指定目标窗体句柄来确定目标线程,通常情况下由窗体过程来处理消息: PostThr ...

  4. C语言 · 判定字符位置

    算法训练 6-3判定字符位置   时间限制:1.0s   内存限制:512.0MB      返回给定字符串s中元音字母的首次出现位置.英语元音字母只有‘a’.‘e’.‘i’.‘o’.‘u’五个. 若 ...

  5. SO_REUSEADDR的作用

    服务器socketstreamtcpc 原贴地址:http://topic.csdn.net/u/20090103/16/a0414edb-b289-4c72-84da-39e155e8f4be.ht ...

  6. ElasticSearch自定义分析器-集成结巴分词插件

    关于结巴分词 ElasticSearch 插件: https://github.com/huaban/elasticsearch-analysis-jieba 该插件由huaban开发.支持Elast ...

  7. Game Loop的几种实现方式

    http://www.bennychen.cn/2011/06/game-loop-model/ —————————————————————————————— 写这篇博客的目的是为了对game loo ...

  8. [android] Android 错误集锦

    问题1:导入工程时报错The import android.XXX cannot be resolved 解决方法: 1.右键工程→Bulid Path→Configure Build Path... ...

  9. 关于Struts2的jsp页面的注释

    语句就算用<!-- -->注释后,还是会在编译的时候显示在网页上,而且网页还会报错,因为注释的那些语句也会去编译,也会去检查有没有错误,所以一些注释掉的过时的变量和方法也会导致报错.500

  10. Android开源库集锦(转)

    一.兼容类库 ActionBarSherlock : Action Bar是Android 3.0后才开始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的所有平台, ...