Python网络与并发编程 12 multiprocessing模块使用

multiprocessing模块

Python中提供了multiprocessing模块来实现进程并发编程,官方文档如下:

官方文档

由于GIL锁的存在,所以CPython中多线程是不能够并行运行的,但是多进程可以并行运行,该模块用到的地方基本很少,但是仍然需要进行掌握。

此外,它和threading模块99%的接口都一模一样,只有少量的差别。

添加子进程

针对不同平台选择添加子进程的方式

multiprocessing模块针对不同的平台,添加子进程的方式也有所区别:

  • spawn:该方式是Windows平台下的默认方式,它会创建一个新的解释器进程,速度比较慢
  • fork:该方式是Unix平台下的默认方式,内部会通过os.fork()产生一个新的解释器分叉

需要注意的是,如果平台是Windows,则必须将启动代码书写到if __name__ == "__main__”语句的下面,否则将会抛出异常。

如何指定新进程的启动方式?示例如下:

import multiprocessing

if __name__ == "__main__":
    multiprocessing.set_start_method("fork")

实例化Process类

使用该方式新增子线程任务是比较常见的,也是推荐使用的。

简单的代码示例如下,创建3个子进程并向其添加任务,然后运行并打印它们的PID和进程名字:

import multiprocessing
import time


def task(params):
    print("sub process run")
    currentThread = multiprocessing.current_process()
    time.sleep(3)
    print("current subProcess id : %s\ncurrent sub process name : %s\ncurrent sub process params : %s" % (
        currentThread.ident, currentThread.name, params))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值