python多进程_Python多进程实践

本文重点探究以下几个内容:

  • 创建进程Process
  • 进程间数据传递Queue/Pipe/Value/Array/Manager
  • 进程池Pool

创建进程Process

创建进程方式如下:

20e94571b946bab326332b1787d8fca9.png
  • 可以看出,Process的用法与Thread类似,守护进程设置方式为deamon属性。由于join为0.5且为守护进程,因此不等守护进程运行结束主程序已退出。若增加另一非守护进程,则必须等非守护进程结束,守护进程才能退出
  • 同样,可以通过继承Process实现进程

进程间数据传递Queue/Pipe/Value/Array/Manager

可以通过Lock锁机制实现共享锁,但比较常用的方式还是以上这些方式,效率更高,更安全。

Queue

使用方式

c6116b4c0c476fdb71edfe9cccfe1eaa.png

构造

  • multiprocessing.Queue([maxsize])
    限制队列长度

类方法

  • qsize()
    返回队列的大致大小,因为多进程或者多线程一直在消耗队列,因此该数据不一定正确
  • empty()
    判断队列是否为空,如果是,则返回True,否则False
  • full()
    判断队列是否已满,如果是,则返回True,否则False
  • put(obj[, block[, timeout]])
    将对象放入队列,可选参数block为True,timeout为None
  • get()
    从队列取出对象

Pipe

使用方式

3c10284ccbb9f3754e1cb32443f4ff29.png

构造

  • conn1, conn2 = multiprocessing.Pipe([duplex])
    若duplex为True(默认),则是双向的,False则是单向的。 conn1只能接受,conn2只能发送。

Value和Array

5ec1fecdb4033c408dc6df0c56b6bee7.png

Manager

更多类型支持一般使用Manager,支持的类型包括list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array,使用方式如下:

fd24db99a52f777f6032eea4f081119b.png

进程池

一般使用方式如下:

构造函数
multiprocessing.pool.Pool([processes[, initializer[, initargs[, maxtasksperchild[, context]]]]])

  • 若processes没有传,则默认为 os.cpu_count()

类方法

  • apply(func[, args[, kwds]])
    在返回结果前,将一直阻塞进程,注意:func只在一个进程中运行
  • apply_async(func[, args[, kwds[, callback[, error_callback]]]])
    在需要并行的场景中,一般用此方法更好。当result准备好时就调用callback,失败则调用error_callback,注意:自定义回调函数只接受一个参数且时非阻塞的
  • map(func, iterable[, chunksize])
    为map()函数的并行版。将可迭代对象拆成小块,放到不同进程中运行。对于内存占用大的可迭代对象,一般使用imap或imap_unordered
  • map_async(func, iterable[, chunksize[, callback[, error_callback]]])
    非阻塞版。
  • imap(func, iterable[, chunksize])
    注意:若iterable很长时,chunksize(默认为1)设一个大的值速度更快。
  • imap_unordered(func, iterable[, chunksize])
    无序(若进程个数为1,则顺序一致)

以上部分代码来自官方文档:https://docs.python.org/3/library/multiprocessing.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值