本模块提供了多进程进行共同协同工作的功能。由于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. 可编辑DIV 光标位置 处理

    //场景: 要做一个网页即时通信,发送信息的文本编辑框 要求能发图片和表情,那么textarea就不能满足需求了,因为textarea内没有办法加入image // 采用方案是使用可编辑的DIV(也就 ...

  2. 003Angular2中使用ng-bootstrap

    1.检查@angular/cli版本 命令行ng -v ,版本号必须大于1.0.0-beta.24 2.新建工程 工程所在目录,命令行ng new my-app --style=scss 带style ...

  3. javascript实现数据结构与算法系列

    1.线性表(Linear list) 线性表--简单示例及线性表的顺序表示和实现 线性表--线性链表(链式存储结构) 线性表的静态单链表存储结构 循环链表与双向链表 功能完整的线性链表 线性链表的例子 ...

  4. 不要在using语句中调用WCF服务

    如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题. using (CnblogsWcfClient client = new CnblogsWcfClient()) ...

  5. 移动端调试工具weinre

    前段时间在大豹公众号上看到一个关于移动端调试的工具,了解了一下,确实不错. npm install -g weinre 先全局安装,然后使用的时候通过如下命令启动 weinre --boundHost ...

  6. 初识EMC

    EMC,即电磁兼容,是指设备在预期的电磁环境中,能按设计要求正常抵抗电磁干扰的能力.其主要包含3个方面:电磁干扰(EMI),电磁抗扰(EMS)与静电放电抗扰(ESD). 电磁干扰的方式可以大概分为传导 ...

  7. 数据结构与算法分析java——栈和队列

    1. 栈 1.1 分类 顺序栈:顺序线性表实现 链式栈:单向链表存储堆栈 1.2栈的应用 1)数制转换 import java.util.Scanner; import java.util.Stack ...

  8. 解决Myeclipse报PermGen space异常的问题

    最近使用eclipse做开发,使用的服务器是tomcat,但在启动时报了Caused by: java.lang.OutOfMemoryError: PermGen space的异常. 这个错误很常见 ...

  9. websocket常见错误

    当websockt连接是open的时候send()方法传送数据,当连接关闭或获取不到的时候回抛出异常. 一个通常的错误是人们喜欢在连接open之前发送消息.如下所示: // 这将不会工作 var ws ...

  10. python:验证客户端链接的合法性与socketserver

    一.验证客户端链接的合法性 from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_a ...