14.2 multiprocessing--多线程
本模块提供了多进程进行共同协同工作的功能。由于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--多线程的更多相关文章
- 多进程 multiprocessing 多线程Threading 线程池和进程池concurrent.futures
multiprocessing.procsess 定义一个函数 def func():pass 在if __name__=="__main__":中实例化 p = process( ...
- Day9 - Python 多线程、进程
Python之路,Day9, 进程.线程.协程篇 本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...
- Python初学——多进程Multiprocessing
1.1 什么是 Multiprocessing 多线程在同一时间只能处理一个任务. 可把任务平均分配给每个核,而每个核具有自己的运算空间. 1.2 添加进程 Process 与线程类似,如下所示,但是 ...
- Python 多线程、进程
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Python多线程、进程、协程
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Python之threading多线程,多进程
1.threading模块是Python里面常用的线程模块,多线程处理任务对于提升效率非常重要,先说一下线程和进程的各种区别,如图 概括起来就是 IO密集型(不用CPU) 多线程计算密集型(用CPU) ...
- Python多进程并发(multiprocessing)用法实例详解
http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...
- multiprocessing 源码解析 更新中......
一.参考链接 1.源码包下载·链接: https://pypi.org/search/?q=multiprocessing+ 2.源码包 链接:https://pan.baidu.com/s/1j ...
- Java并发-多线程面试(全面)
1. 什么是线程?2. 什么是线程安全和线程不安全?3. 什么是自旋锁?4. 什么是Java内存模型?5. 什么是CAS?6. 什么是乐观锁和悲观锁?7. 什么是AQS?8. 什么是原子操作?在Jav ...
- C++中多线程与Singleton的那些事儿
前言 前段时间在网上看到了个的面试题,大概意思是如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton. 看到这个题目后,第一个想法就是用Scott Meyer在<Effe ...
随机推荐
- 从零开始的全栈工程师——JS面向对象(复习)
作用域 栈内存:js执行的环境堆内存:存放代码块的空间 存放方式 键值对形式存放 字符串的形式存放js在执行之前 浏览器会给他一个全局作用域叫window 每个作用域下都分为两个模块 一个是内存模块一 ...
- 洛谷P2312 解方程(暴力)
题意 题目链接 Sol 出这种题会被婊死的吧... 首先不难想到暴力判断,然后发现连读入都是个问题. 对于\(a[i]\)取模之后再判断就行了.注意判断可能会出现误差,可以多找几个模数 #includ ...
- linux环境下 mysql数据库忘记密码 处理办法
整个修改过程大概3-10分钟(看个人操作),这个时间内mysql出于不需要密码就能登陆的状态,请设法保证系统安全 不罗嗦直接上步骤 1.vi /etc/my.cnf 在[mysqld]下,添加一句:s ...
- Web安全色的意义
问题: 不同的平台(Mac.PC等)有不同的调色板,不同的浏览器也有自己的调色板.这就意味着对于一幅图,显示在Mac上的Web浏览器中的图像,与它在PC上相同浏览器中显示的效果可能差别很大. 选择特定 ...
- QBC(Query By Criteria) QBE (Query By Example)
QBC 参考:(Hibernate的QBC查询) //is empty and is not empty @Test public void testQBC(){ Session session = ...
- elasticsearch5.5.2环境搭建
运行elasticsearch5.5.2需要jdk1.8版本以上 1.elasticsearch可以去官网或github下载,window系统推荐zip压缩版 2.解压后 进入bin目录运行elast ...
- 序列化Serializable
public interface Serializable 类的序列化由实现java.io.Serializable接口的类启用. 不实现此接口的类将不会使任何状态序列化或反序列化. 可序列化类的所有 ...
- js如何完整的显示较长的数字
试试下面一行吧 Math.pow(10, 99).toLocaleString().split(',').join('') toLocaleString([character]) 方法会将其对象转换成 ...
- Spring Boot学习路线
Spring Boot 学习路线,本文计划根据作者近几年的工作.学习经验,来分析和制定一个学习使用 Spring Boot技术的步骤路线图. SpringBoot是伴随着Spring4.0诞生的: S ...
- 部署Smokeping
1.环境安装 # yum -y install gcc* perl* httpd* libxml2 libxml2-devel libpng libpng-devel glib2 glib2-deve ...