本模块提供了多进程进行共同协同工作的功能。由于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. Web服务器父与子 Apache和Tomcat

    Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.在Apache基金会里面Apache S ...

  2. Windows7建立无线热点

    很实用的技巧,加以记录. 最初我是想使用connectify的,不过安装这个软件之后,发现有线账号登不上了,所以就选择使用Windows7自带的工具了. 首先以管理员身份运行cmd. 进入之后cd到c ...

  3. Cloud Foundry和微服务Meetup重磅来袭

    CF 同学们: Cloud Foundry 2016 上海 Meetup 将在10月22日在上海港汇广场进行! 想要参会的小伙伴,请直戳  ~ 在过去的一年,CF 的技术有很多进展,微服务也是2016 ...

  4. Selenium2学习(十三)-- JS处理滚动条

    前言 selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候 ...

  5. 1.appium介绍

    appium介绍 官方网站 1.特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用. “移动原生应用”是指那些用iOS或者 An ...

  6. day1 python 介绍、基本语法、流程控制

    请查看我的云笔记链接: http://note.youdao.com/noteshare?id=0ea7425d3e3669800cb0d73f7ec8865d&sub=D87B4BF820C ...

  7. python入门12 列表list

    列表使用率较高,方法也多. 列表的定义 #coding:utf-8 #/usr/bin/python """ 2018-11-10 dinghanhua 列表 " ...

  8. [USACO15OPEN]haybales Trappe…

    嘟嘟嘟 刚开始我以为如果这头牛撞开一个干草堆的话,获得的冲刺距离只有新增的部分,但实际上是加上原来的部分的. 暴力很好写,区间排完序后一次判断每一个区间是否能逃脱,复杂度O(n2). 优化想起来也不难 ...

  9. 利用firebug 查看JS方法, JS 调试

    “DOM” 可以查看变量和方法. “脚本”可以用来调试js方法. 有空总结一下白鹤堂老师的最牛JavaScript.

  10. 【luogu P3952 时间复杂度】 题解

    对于2017 D1 T2 这道题 实实在在是个码力题,非常考验耐心. 其实大体的思路并不是非常难想出来,但是要注意的小细节比较多. 题目链接:https://www.luogu.org/problem ...