Python多进程

17.1 多进程

在Python中,由于GIL的存在,我们在多线程环境下,无法充分利用多核多CPU带来的任何优势,因此,我们可以使用多进程来代替多线程,这样就可以不用受到GIL的制约。

17.1.1 进程的创建(Process类)

Python中提供了multiprocessing模块来实现进程的相关操作。
我们可以通过与创建线程类似的方式创建子进程:

  • 通过Process类来创建一个子进程。
  • 通过继承Process类,重写run方法来创建子进程。

注意:在Windows平台,在创建子进程时,一定要使用如下的语法:

if __name__ == "__main__":
	# 创建子进程语句,例如:
    p = multiprocessing.Process(target=)

原因在于:在Windows平台上,当创建子进程时,会自动导入创建子进程的模块,因此,这样就会出现无限递归调用。为了避免这种情况,我们使用如上的判断进行限制。在Linux中无此限制。
练习:创建一个子进程,在if name == "main"平行的级别上面,输出“当前进程执行完毕”,会发现什么情况?

17.1.2 进程相关的操作

os.getpid()
os.getppid()
os.fork()
进程对象的相关操作:
run()
start()
is_alive()
name
daemon
pid

17.1.3 进程的创建(fork方法)

在Linux操作系统中,我们也可以通过os模块的fork方法来创建子进程。fork方法会返回一个数值,对于父进程,会返回子进程的id,对于父进程,会返回0。
当创建子进程后,子进程会在fork的位置,继续向下执行。

17.1.4 进程队列

进程具有独立的内存空间,因此,进程通讯不像线程通讯那样容易。
我们可以使用进程队列来完成进程之间的通讯。进程队列的用法与线程队列非常相似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值