本模块提供了多进程进行共同协同工作的功能。由于Python存在GIL锁,对于多线程来说,这只是部分代码可以使用多CPU的优势,对于想全部使用多CPU的性能,让每一个任务都充分地使用CPU,那么使用多进程就是达到此目的,因为每个进程在Python里单独的GIL锁,这样就不会在不同进程之间进行了阻塞。因此,如果是需要使用大量CPU计算资源的需要,就应该使用多进程的方式。

class multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

创建一个多进程管理对象,它就像多线程管理类Thread是一样的。参数group是总是为None,为了兼容线程类;参数target是被run()调用的可调用对象;参数name是进程的名称;参数args是target对象的参数;参数kwargs是target对象的参数;参数daemon是是否设置为守护进程,守护进程不关心父进程是否退出的进程。

run()

进程运行的主函数。

start()

启动进程。

join([timeout])

阻塞直到进程退出为止,如果有设置超时时间就到达超时时间或者进程退出就返回。

name

进程的名称。

is_alive()

返回进程是否运行中,如果是返回True。

daemon

守护进程的标志。

pid

返回当前进程的ID。

exitcode

返回进程退出码。

authkey

进程的授权键值。

sentinel

数字表示的句柄。可以使用在系统等待函数里。

terminate()

终止进程。

exception multiprocessing.ProcessError

多进程的基本异常。

exception multiprocessing.BufferTooShort

接收缓冲区太小时异常。

exception multiprocessing.AuthenticationError

授权异常。

exception multiprocessing.TimeoutError

超时异常。

multiprocessing.Pipe([duplex])

两个进程之间的通讯的管道对象。参数duplex是设置为True时表示双向通讯。

class multiprocessing.Queue([maxsize])

多个进程之间进通讯的队列。它与管道的区别是可以多个进程之间进行通讯,管道只能是两个进程之间进行通讯。

qsize()

返回队列的大小。

empty()

如果队列为空返回True。

full()

如果队列已经满返回True。

put(obj[, block[, timeout]])

把对象obj放入队列。如果参数block为True,而参数timeout是None,直到放入成功本函数调用才返回。

put_nowait(obj)

把对象obj放入队列,不作等待,相当于put(obj, False)。

close()

当前进程关闭列表,不再放入任何数据到队列。

join_thread()

加入后台线程方式,以便等所有数据从队列里发送出去再退出进程。

cancel_join_thread()

防止后台线程阻塞,取消阻塞方式退出进程。

class multiprocessing.SimpleQueue

简化的队列,与类Pipe比较类似。

empty()

当队列为空返回True。

get()

从队列里删除,并返回删除的项。

put(item)

把一项对象放入到队列。

class multiprocessing.JoinableQueue([maxsize])

队列的派生类,添加了两个新的方法。

task_done()

当使用get()函数获取任务已经做完了,可以调用本函数来通知队列任务已经做完。

join()

当队列里所有项未曾被处理之前,一直阻塞。

multiprocessing.active_children()

返回当前进程所有活动子进程列表。

multiprocessing.cpu_count()

返回当前系统有多少个CPU。

multiprocessing.current_process()

返回当前进程对应的Process对象。

multiprocessing.freeze_support()

支持打包到Windows的EXE文件。

multiprocessing.get_all_start_methods()

返回当前平台所支持的创建进程的方式列表。

multiprocessing.get_context(method=None)

返回多进程里的环境变量。

multiprocessing.get_start_method(allow_none=False)

返回启动进程的方式,比如fork,spawn,forkserver或None。

multiprocessing.set_executable()

设置子进程所使用解析器的路径。比如set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))。

multiprocessing.set_start_method(method)

设置启动子进程的方式。

多进程运行的例子:

#python 3.4
from multiprocessing import Process, Queue

def f(q, name):
    q.put(['hello', name])

if __name__ == '__main__':
    print('start...')
    q = Queue()
    p = Process(target=f, args=(q,'blog.csdn.net/caimouse',))
    p.start()
    print(q.get())
    p.join()
    print('gone')

结果输出如下:

start...

['hello', 'blog.csdn.net/caimouse']

gone

多进程使用管道通讯的例子:

#python 3.4

from multiprocessing import Process, Pipe

def f(conn):

conn.send([42, None, 'hello'])

conn.close()

if __name__ == '__main__':

parent_conn, child_conn = Pipe()

p = Process(target=f, args=(child_conn,))

p.start()

print(parent_conn.recv())   # prints "[42, None, 'hello']"

p.join()

结果输出如下:

[42, None, 'hello']

蔡军生  QQ:9073204 深圳

14.2 multiprocessing--多线程的更多相关文章

  1. 多进程 multiprocessing 多线程Threading 线程池和进程池concurrent.futures

    multiprocessing.procsess 定义一个函数 def func():pass 在if __name__=="__main__":中实例化 p = process( ...

  2. Day9 - Python 多线程、进程

    Python之路,Day9, 进程.线程.协程篇   本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...

  3. Python初学——多进程Multiprocessing

    1.1 什么是 Multiprocessing 多线程在同一时间只能处理一个任务. 可把任务平均分配给每个核,而每个核具有自己的运算空间. 1.2 添加进程 Process 与线程类似,如下所示,但是 ...

  4. Python 多线程、进程

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  5. Python多线程、进程、协程

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  6. Python之threading多线程,多进程

    1.threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图 概括起来就是 IO密集型(不用CPU) 多线程计算密集型(用CPU) ...

  7. Python多进程并发(multiprocessing)用法实例详解

    http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...

  8. multiprocessing 源码解析 更新中......

    一.参考链接 1.源码包下载·链接:   https://pypi.org/search/?q=multiprocessing+ 2.源码包 链接:https://pan.baidu.com/s/1j ...

  9. Java并发-多线程面试(全面)

    1. 什么是线程?2. 什么是线程安全和线程不安全?3. 什么是自旋锁?4. 什么是Java内存模型?5. 什么是CAS?6. 什么是乐观锁和悲观锁?7. 什么是AQS?8. 什么是原子操作?在Jav ...

  10. C++中多线程与Singleton的那些事儿

    前言 前段时间在网上看到了个的面试题,大概意思是如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton. 看到这个题目后,第一个想法就是用Scott Meyer在<Effe ...

随机推荐

  1. webstorm 配置Vue.js 语法提示

    标签属性 v-text v-html v-once v-if v-show v-else v-for v-on v-bind v-model v-ref v-el v-pre v-cloak v-on ...

  2. 中值滤波C语言优化

    中值滤波C语言优化 图像平滑是图像预处理的基本操作,本文首先用不同的方法对一张图片做预处理比较它们效果的不同,然后针对中值滤波,实现了一种快速实现.(其实是copy的opencv实现,呵呵).因为op ...

  3. 如何取消IntelliJ IDEA打开默认项目配置

    一.前言            在前端中,个人比较喜欢使用IntelliJ IDEA开发工具!IntelliJ IDEA是非常强大的开发集成工具,打开IntelliJ IDEA软件默认会打开最近一次的 ...

  4. 菜鸟学习Spring——SpringMVC注解版前台向后台传值的两种方式

    一.概述. 在很多企业的开法中常常用到SpringMVC+Spring+Hibernate(mybatis)这样的架构,SpringMVC相当于Struts是页面到Contorller直接的交互的框架 ...

  5. IoT Architecture

  6. android Handler、Thread和Runnable

    android里面的创建的Handler对象并不是新建一个新的线程,而是在主线程执行,主线程的消息队列中循环. java中实现一个线程有两种方法,一种是继承Thread类,一种是实现Runnable接 ...

  7. 关于SessionFactory的不同实现类分别通过getCurrentSession()方法 和 openSession() 方法获取的Session对象在保存对象时的一些区别

    一.单向多对一关联关系 一).使用LocalSessionFactoryBean类,即在applicationContext中配置的 <!-- 配置SessionFactory 使用LocalS ...

  8. win8+VS2012搭建OpenGL超级宝典的环境

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/booirror/article/details/36957799 自从公司搬到腾讯附近,每天上班都迟 ...

  9. Catalan数列

    引入 今天听学长讲了卡特兰数列后对其有了更深的认识,在此完善了一下之前的博客加以总结. 首先用一个经典的例子来描述一下Catalan数列,我们有一个1~n的数列和一个大小为n的栈,我们有如下两种操作: ...

  10. 手机验证码免费10条\java、C#、html....

    使用互亿无线短信接口网址:http://www.ihuyi.com/. 首先第一步,进行注册 第二步:注册成功后进来的页面 第三步:实名认证 第四步:个人信息 等待认证成功后才能继续操作 第五步:进行 ...