多进程:

(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. shadowshocks下载地址

    https://github.com/shadowsocks/shadowsocks-windows/releases

  2. Java调用存储过程小结

    学生在学习jdbc的时候,会问到怎么调用存储过程,现在将java调用oracle存储过程的示例总结如下.(关于调用sqlserver的存储过程将在下次进行小结请关注) 一:无返回值的存储过程 存储过程 ...

  3. 基于jQuery在线问卷答题系统代码

    分享一款基于jQuery在线问卷答题系统代码是一款实用的jQuery答题插件,点击下一题切换带有淡入淡出效果.实现的效果图如下: 在线预览   源码下载 实现的代码. html代码: <div ...

  4. war 宽度变窄

    1.打开开始菜单-运行-输入Regedit 打开注册表编辑器 展开 HKEY_CURRENT_USER 继续展开 Software继续展开 Blizzard Entertainment 在Warcra ...

  5. 搭建一个单纯学习hibernate的项目

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  6. 【WPF】C#代码动态改变控件的样式

    需求:C#代码生成的一组按钮Button需要设置样式. 如果是在XAML中引入样式: <!-- 引入资源 --> <UserControl.Resources> <Res ...

  7. 【WPF/C#】联网异步获取二进制文件(如图片)的流程

    步骤: 联网异步获取Json数据. 使用Json.NET工具,反序列化Json为对应的实体类,获得该实体类的对象. 从对象身上获取图片路径(实体类中定义了头像图片是string类型的文件路径). 根据 ...

  8. iio adc转换应用编写

    #include <stdio.h>        #include <stdlib.h>         #include <fcntl.h>         # ...

  9. Idea配置sbt(window环境)

    近开发spark项目使用到scala语言,这里介绍如何在idea上使用sbt来编译项目. 开发环境:windows 1. 下载sbt http://www.scala-sbt.org/download ...

  10. 关于SQL语句的一些注意事项

    1.Into 表后要编辑-IntelliSense-刷新本地缓存 才能访问新表 2.Is null不是=null