美文网首页
进程之多进程

进程之多进程

作者: 遇明不散 | 来源:发表于2019-04-19 10:02 被阅读0次

多进程

  • 更方便高效的进程创建方法
  • multiprocessing模块 (标准库模块)
  • 使用multiprocessing创建子进程,同样子进程复制父进程的全部代码段,父子进程各自执行互不影响,父子进程有各自的运行空间
创建进程的步骤
  • 需要将要执行的事情封装为函数
  • 使用multiprocessing模块中Process类创建进程对象
  • 通过对象属性设置和Process的初始化函数对进程进行设置,绑定要执行的函数
  • 启动进程,会自动执行进程绑定的函数
  • 完成进程的回收
进程的回收
  • 阻塞等待对应子进程的退出,然后回收子进程
  • 内核会帮助应用层记录子进程的退出情况,当使用join函数时内核会及时返回进程状态给应用层进行处理
创建子进程

Process() 创建进程对象

  • 参数:
    • target 指定要绑定的函数
    • name 给创建的进程起一个名字
    • args 需要一个元组,给target指定的函数按位置传参
    • kwargs 需要一个字典,给taregt指定的函数按键值传参
  • 属性与方法(p代表一个进程)
    • p.name 进程名称
    • p.pid 进程PID
    • p.daemon
      • False(默认值)表示主进程运行结束后,不会影响子进程的运行,直到所有子进程运行完毕,进程才会结束
      • True 主进程运行完毕则所有子进程也不再运行一起退出。
      • 注意:
        • 该属性的设置必须要在start()
        • 该属性的设置并不是将进程设置为linux/unix中的守护进程
    • p.is_alive() 判断进程生命周期状态,处于生命周期得到True否则返回False
    • p.start() 启动子进程,target函数会自动执行,此时进程真正被创建
    • p.join() 阻塞等待回收子进程
      • 参数:p.join(timeout) 设置最长阻塞时间,如果超过这个时间还没有子进程退出,则不会继续等待
  • 注意
    • 函数当付给Processtarget变量后函数内容就是对应进程的进程内容,此时函数才有特殊性
    • 多个子进程和父进程之间的执行互不影响
    • 使用multiprocessing创建子进程,同样子进程复制父进程的全部代码段,父子进程各自执行互不影响,父子进程有各自的运行空间
    • 如果不使用join回收子进程则子进程退出后会成为僵尸进程
    • 使用multiprocessing创建子进程往往父进程只是用来创建进程回收进程
    • 如果子进程从父进程拷贝对象,对象和网络或者文件相关联,那么父子进程会使用同一套对象属性,相互有一定的关联性
    • 如果在子进程中单独创建对象,则和父进程完全没有关联
# process1.py
from multiprocessing import Process
from time import sleep
import os

def worker(sec,name):
    for i in range(3):
        sleep(sec)
        print("I'm %s" % name)
        print("I'm working ...")

p = Process(target = worker,\
    kwargs = {'sec':2,'name':'Jason'})

p.start()
print('Process name',p.name)
print('Process PID',p.pid)
print('Process is alive or not:',p.is_alive())
print('Parent pid',os.getpid())
p.join()

自定义进程类

  • 继承Process类以获取原有的属性
  • 编写自己的__init__ ,同时加载父类init方法
  • 重写run方法,可以通过生成的对象调用start自动运
# myProcess.py
from multiprocessing import Process
import time

class myProcess(Process):
    def __init__(self,value):
        self.value = value
        super(myProcess,self).__init__()

    def run(self):
        for i in range(5):
            print('This is my process {}'.format(time.ctime()))
            time.sleep(self.value)

p = myProcess(1)
p.start()
p.join()

多进程的优缺点

优点

  • 可以并行执行多个任务,提高运行效率
  • 空间独立,数据安全
  • 运行不受其他进程影响,创建方便

缺点

  • 进程的创建和销毁过程需要消耗较多的计算机资源
  • 在需要频繁的创建和销毁较多进程情况下,资源消耗过多,不适宜使用多进程完成任务

相关文章

  • Python多进程

    目录:一、进程的状态二、进程的创建三、进程间通信四、进程池 Python并发之多进程 一、进程的状态 工作中,任务...

  • 进程之多进程

    多进程 更方便高效的进程创建方法 multiprocessing模块 (标准库模块) 使用multiprocess...

  • python之多线程与多进程入门

    python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...

  • python之多进程

    要让python实现多进程「multiprocessing」。我们先来了解操作系统相关知识。Unix 和 Linu...

  • python之多进程

    实例一:一个简单的多进程实例,要创建进程,需要motiproceing模块。用法和创建线程的差不多。这个程序,实现...

  • python之多进程

    1. 简介 进程:通常一个运行着的应用程序就是一个进程,比如:我启动了一个音乐播放器,现在它就是一个进程。线程:线...

  • 33.Python并发编程之多进程

    Python并发编程之多进程 什么是进程?进程是一个抽象的概念,进程的概念起源于操作系统,正在进行的一个过程或者一...

  • python 进程和线程之多进程

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 多进程 要让Python程序实现多进程(mult...

  • python多进程

    python之多进程 写在前面 前面学习了多线程今天来学习一下多进程,相对于多线程,其实多进程的使用在日常生活中会...

  • iOS 10 发送iMessage

    发送iMessage 的套路非常之多, 从MobileSMS 进程的界面模块, 到identityservice ...

网友评论

      本文标题:进程之多进程

      本文链接:https://www.haomeiwen.com/subject/cwnfgqtx.html