本模块提供了多进程进行共同协同工作的功能。由于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 深圳

最新文章

  1. 关于StrangeIOC框架
  2. C# Socket系列一 简单的创建socket的监听
  3. 【Windows批处理II】类C语言的学习和思考
  4. Sass和Compass制作雪碧图
  5. dedecms内容页调用缩略图 缩略图多种用法(借鉴)
  6. 使用QtScript库解析Json数组例子
  7. vs2013搭建团队版本控制 TFS、SVN
  8. MBProgressHUD1.0.0源码解析
  9. C#设计模式之一单例模式(Singleton Pattern)【创建型】
  10. H5音乐自动播放ios//禁止安卓手机图片点击
  11. 列举spark所有算子
  12. BZOJ.4821.[SDOI2017]相关分析(线段树)
  13. 用jquery得到select选中的值
  14. 什么?作为程序员的你还不知道怎么访问 Google
  15. Redis高可用详解:持久化技术及方案选择
  16. js中实现IE的打印预览
  17. 代码: html 页面小效果 (集合,待补充)
  18. C#内存管理和垃圾回收机制
  19. java 可重入锁ReentrantLock的介绍
  20. rubber

热门文章

  1. 2018.10.23NOIP模拟赛解题报告
  2. std::string, std::wstring, wchar_t*, Platform::String^ 之间的相互转换
  3. 单例模式(C++)
  4. 浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用
  5. 用Webstorm 运行React-native 工程时,出错:xcrun: error: unable to find utility "instruments", not a developer tool or in PATH
  6. 一键生成http服务器
  7. RAC常用日志总结
  8. vuejs 开发中踩到的坑
  9. hdu-2136 Largest prime factor---巧用素数筛法
  10. PS中会使用到的快捷键有那些?