Python 多进程编程

Python的GIL限制了多线程性能,因此使用multiprocessing库进行多进程编程以利用多核CPU。文章介绍了multiprocessing库的Process类和Pool类,包括启动、结束进程、进程间的通信以及使用进程池进行批量任务处理。建议在无需数据交换且关注任务结果的情况下使用进程池。
摘要由CSDN通过智能技术生成

Python 多进程编程

Python的解释器默认是线程安全的,其主要措施是一个叫做GIL(Global Interpreter Lock)的机制。

GIL机制来保证对Python对象的引用计数的操作都是原子操作,从而不会因为多线程造成引用对象的内存泄漏和错误引用。但是这个机制也就限制了多线程的性能。因为GIL的存在,Python一次只能有一个线程在运行。

所以多线程不能提高程序性能,除非你有大量的I/O操作(例如:读写文件,网络通信等)。

另外一种提高性能,利用多CPU的方案就是多进程。

这里介绍如何使用Python库multiprocessing,生成多进程来利用多核CPU。

多进程库 multiprocessing

multiprocessing 是Python的标准库之一,官方文档参考multiprocessing — Process-based parallelism.

我们主要使用它的2个类来产生子进程:

  • Process 进程类
  • Pool 进程池类

进程类 Process

Process类可以单独调用,也可以继承使用。主要操作如下:

  • Process.start() 启动子进程
  • Process.join() 等待子进程结束(阻塞等待)
  • Process.is_alive() 判断子进程是否在运行(运行中返回True)
  • Process.close() 结束子进程(不推荐使用,会抛出异常)

这里以调用为例:

#!/usr/bin/python

from __future__ import print_function  # at top of module
from __future__ import division, unicode_literals, with_statement

import time
import os
from multiprocessing import Process


def task_func(timeout):
    name = 'task[%d]' % os.getpid()
    print('%s start' % name)
    for i in range(timeout):
        time.sleep(1)
        print('%s waiting(%d/%d)'<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值