Python标准库—multiprocessing模块

multiprocessing

multiprocessing 是一个用与 threading模块相似API的支持产生进程的包。 multiprocessing包同时提供本地和远程并发,使用子进程代替线程,有效避免 Global Interpreter Lock(GIL)带来的影响。因此, multiprocessing模块允许程序员充分利用机器(Unix 或 Windows)上的多个核心。

multiprocessing.Process

multiprocessing.Process类提供了与threading.Thread类类似的API:通过创建一个 Process对象然后调用它的 start() 方法来生成进程。

class multiprocessing.Process(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

应始终使用关键字参数调用构造函数。 group 应该始终是 None ;它仅用于兼容 threading.Threadtarget是由 run() 方法调用的可调用对象。它默认为 None ,意味着什么都没有被调用。 name 是进程名称。 args 是目标调用的参数元组。 kwargs 是目标调用的关键字参数字典。进程 daemon标志设置为 TrueFalse 代表是否为守护进程。如果是 None (默认值),则该标志将从创建的进程继承。

Process类属性或方法:

  • run():表示进程活动的方法。
  • satrt():启动进程活动。
  • join([timeout]):如果可选参数 timeoutNone (默认值),则该方法将阻塞,直到调用 join()方法的进程终止。如果 timeout 是一个正数,它最多会阻塞 timeout 秒。请注意,如果进程终止或方法超时,则该方法返回 None
  • name:进程名称;
  • is_alive():进程是否还活着;
  • daemon:进程的守护标志,一个布尔值。
  • pid:返回进程ID。在生成该进程之前,这将是 None
  • terminate():终止进程。
  • kill():与terminate()相同。
import multiprocessing

def process_job(name):
    print("Hi,{}".format(name))

if __name__ == '__main__':
    print("Create Process.")
    p = multiprocessing.Process(target=process_job, args=("Tom",))
    p.start()
    p.join()
    print("Finished!")

Queue & Pipe

使用多进程时,一般使用消息机制实现进程间通信,尽可能避免使用同步原语(例如锁)。

消息机制包含: Pipe()(可以用于在两个进程间传递消息),以及队列(能够在多个生产者和消费者之间通信)。

  • multiprocessing.Pipe([duplex])

    返回一对 Connection对象 (conn1, conn2) , 分别表示管道的两端;如果 duplex 被置为 True (默认值),那么该管道是双向的。如果 duplex 被置为 False ,那么该管道是单向的,即 conn1 只能用于接收消息,而 conn2 仅能用于发送消息。

    示例:返回的两个连接对象 表示管道Pipe()的两端,每个连接对象都有 send()recv() 方法。

    import multiprocessing
    
    def send(conn):
        conn.send("Good Evening, Father.")
        conn.close()
    
    def main():
        parent_conn
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值