python多进程操作实例

 更新时间:2014年11月21日 10:16:06   投稿:junjie  
这篇文章主要介绍了python多进程操作实例,本文讲解了multiprocessing类的相关方法,然后给出了一个综合实例和运行效果,需要的朋友可以参考下

由于CPython实现中的GIL的限制,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况我们需要使用多进程。 这也许就是python中多进程类库如此简洁好用的原因所在。在python中可以向多线程一样简单地使用多进程。

一、多进程

process的成员变量和方法:

>>class multiprocessing.Process([group[, target[, name[, args[, kwargs]]]]]) 来的定义类似于threading.Thread。target表示此进程运行的函数,args和kwargs表示target的参数。

>>name, pid

分别表示进程的名字,进程id。

>> daemon成员

daemon标志位bool变量,需要在start()调用前设置。daemon的初始值是从父进程继承而来。当一个进程结束的时候,它尝试去结束它的所有的daemon子进程。

注意:

daemon进程不允许创建子进程。否则当daemon进程结束的时候它的子进程不能被结束。

这里的daemon不是Unix的daemon进程,当父进程结束的时候所有的daemon子进程也将被终止(对于非daemon进程,父进程不等待非daemon的紫子进程,除非显示地对非daemon子进程使用join()方法)。

>>  exitcode

如果进程还没有退出,则为None,如果正确的退出则为0,如果有错误则为>0的错误代码,如果进程为终止则为-1*singal。 

>> start(), is_live(), terminate()

start()用来启动进程,is_live()用来查看进程的状态,terminate()用来终止进程。

>> run()

可以在process的子类中重载run()方法,从而设定进程的任务。重载process是构造新进程的另一种方式,一定程度上上等价于process的target参数。

multiprcessing的静态方法:

>>  multiprocessing.cpu_count()

用来获得当前的CPU的核数,可以用来设置接下来子进程的个数。

>>  multiprocessing.active_children()

用来获得当前所有的子进程,包括daemon和非daemon子进程。

实例:

复制代码 代码如下:

import multiprocessing
import time
import sys

def worker(num):
    p = multiprocessing.current_process()
    print ('Starting:' + p.name + ":" + str(p.pid))
    print(str(num))
    sys.stdout.flush()
    print ('Exiting :' + p.name + ":" + str(p.pid))
    sys.stdout.flush()

def daemon():
    p = multiprocessing.current_process()
    print ('Starting:' + p.name + ":" + str(p.pid))
    sys.stdout.flush()
    time.sleep(10)
    print ('Exiting :' + p.name + ":" + str(p.pid))
    sys.stdout.flush()
   
def non_daemon():
    p = multiprocessing.current_process()
    print ('Starting:' + p.name + ":" + str(p.pid))
    sys.stdout.flush()
    time.sleep(20)
    print ('Exiting :' + p.name + ":" + str(p.pid))
    sys.stdout.flush()
   
if __name__ == '__main__':
    w = multiprocessing.Process(name='worker', target=worker, args=(100,))
    d = multiprocessing.Process(name='daemon', target=daemon)
    d.daemon = True
    nd = multiprocessing.Process(name='non-daemon', target=non_daemon)
    w.start()
    d.start()
    nd.start()
   
    print("the number of CPU is " + str(multiprocessing.cpu_count()))
    print("All children processes:")
    for p in multiprocessing.active_children():
        print("child:" + p.name + ":" + str(p.pid))
    print()
   
    w.join()
    #d.join()

运行结果:

可以从上面的例子看到没有多非daemon子进程使用join()方法,结果父进程没有等待非daemon进程结束就退出了。

相关文章

  • PYTHON如何读取和写入EXCEL里面的数据

    PYTHON如何读取和写入EXCEL里面的数据

    这篇文章主要介绍了PYTHON如何读取和写入EXCEL里面的数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • PyCharm设置中文(汉化与解除汉化)的方法

    PyCharm设置中文(汉化与解除汉化)的方法

    这篇文章介绍了PyCharm设置中文(汉化与解除汉化)的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python实现简单的获取图片爬虫功能示例

    Python实现简单的获取图片爬虫功能示例

    这篇文章主要介绍了Python实现简单的获取图片爬虫功能,涉及Python使用urllib模块及正则模块操作页面元素获取图片的相关技巧,需要的朋友可以参考下
    2017-07-07
  • 总结分析Python的5个硬核函数

    总结分析Python的5个硬核函数

    今天看到一篇很好的 Python 博文,结合自己的经验总结,分享给大家一篇关于eval, exec, compile, locals, globals这些函数的文章
    2021-11-11
  • Pandas 重塑(stack)和轴向旋转(pivot)的实现

    Pandas 重塑(stack)和轴向旋转(pivot)的实现

    这篇文章主要介绍了Pandas 重塑(stack)和轴向旋转(pivot)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python使用threading获取线程函数返回值的实现方法

    python使用threading获取线程函数返回值的实现方法

    这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下
    2017-11-11
  • 详解Python的多任务进程

    详解Python的多任务进程

    这篇文章主要为大家介绍了Python的多任务进程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python 中如何实现参数化测试的方法示例

    Python 中如何实现参数化测试的方法示例

    这篇文章主要介绍了Python 中如何实现参数化测试的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Python PySpider爬虫框架安装使用教程

    Python PySpider爬虫框架安装使用教程

    PySpider是一个Python编写的分布式网络爬虫框架,它可以帮助开发者快速构建和部署爬虫,并支持爬虫任务的分布式运行,PySpider基于Twisted网络框架和MongoDB数据库,具有高效、稳定、易用等特点,同时还提供了一套Web界面,可以方便地查看爬虫任务的运行状态和结果
    2023-11-11
  • 音频处理 windows10下python三方库librosa安装教程

    音频处理 windows10下python三方库librosa安装教程

    这篇文章主要介绍了音频处理 windows10下python三方库librosa安装方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论