子进程

一.主程序

from multiprocessing import Process
import  time,os

# 当你完成的任务需要参数时
def task(name):
    print(name," running")
    time.sleep(3)
    print(name," stop")
print(__name__)

# windows 开启子进程 必须放到if中     只要你的开启子进程的代码处于全局 范围 你就应该放到if判断中
if __name__ == '__main__':
    # 为毛创建进程 为了帮父进程做事情
    # 1.创建一个进程对象 需要传入你要做的任务 就是一个函数对象
    p = Process(target=task,kwargs={"name":"jerry"})
    # 2.启动它
    p.start()
    print(id(p))
    print("我是主程序我的pid:%s 我的父进程是:%s" % (os.getpid(),os.getppid()))
    print("我有一个儿子是 %s" % p.pid)

二.进程理论

进程和程序的区别

程序是什么?

  本质就是一堆代码文件!

  一个程序正在被操作系统读取并执行 就编程进程

一个程序只能有一个进程码?

  可以 启动一次就产生一个进程 当然可以用代码控制是否允许多进程

一个程序能有多个进程吗?

  可以 启动一次就产生一个进程 当然可以用代码控制是否允许多进程

 

启动进程的方式

  1.系统出事化  会产生一个根进程

  2.用户的交替请求 鼠标双击某个程序

  3.在一个进程中 发起了系统调用启动了另一个进程

  4.批量处理作业开始 某些专用计算机可能还在使用

不用操作系统创建进程的方式不同

  unix< centos mac linux

    完全拷贝父进程的所有数据 子进程可以访问父进程的数据吗?不可以 但可以访问拷贝过来数据副本

  windows

    创建子进程 加载父进程中所有可执行文件

三.父进程和子进程的执行顺序

from multiprocessing import Process
import time
def task(name):
    print("%s start"%name)
    time.sleep(3)
    print("%s stop"%name)

if __name__=='__main__':
    p=Process(target = task,args=("jerry",))
    p.start()
    print("我是主进程!!!")
    time.sleep(100)
    print("我是主进程!!!over")

肯定是父进程先执行,子进程执行后,父进程后续代码并发

 

四.父进程等待

from multiprocessing import Process
import time
def task(i):
    print("%s start"% I )
    time.sleep(2)
    print("%s stop"%i)
if __name__="__main__":
    start_time = time.time()
    ps=[]
    for i in range(1,3):
        p = Process(target = task,args=(i,))
        p.start()
        ps.append(p)
        # 主进程等待子进程结束
     for p in ps:
        p.join()
    print("主进程!!!!",time.time()-start_time)

五 .开启子进程的方式

from multiprocessing import Process
#方式一
class MyProcess(Process):
    # 当进程被执行时 其实执行的就是run函数
    def run(self):
        print("这是 run 被执行了!")

#方式二
def ttt()
    print("111")
if __name__='__main__':
    mp = MyProcess()
    mp.start()

    p = Process(target=ttt)
    p.start()

六.进程对象的常用属性

from multiprocessing import  Process
import  time


def task(name):
    print("start",name)
    time.sleep(5)
    print("stop",name)

if __name__='__main__':
    p = Process(target=task,args=("jerry",),name="jerrr process-1")
    p.start()
    #p,join()#让父进程等待子进程结束  让父进程让出了CPU执行权
    print(p.name)
    print(p.pid)# 获取这个进程的ID
    p.terminate() #结束子进程
    print(p.is_alive())# 进程是否还存活
    # p 这个进程的父进程 就是该文件 
    import os 
    print(os.getpid())#当前自己进程的id
    print(os.getppid())#pycharm的进程id

小结:

  1.多道技术

    空间复用

    时间复用

  2.Python 如何使用多进程

    1.直接创建process对象 同时传入要做的事情就是一个函数

    2.创建一个雷 继承自process把要做的任务放在run方法中

  3.父进程与子进程的执行顺序

  4.常用属性

    start 开启进程

    join 父进程等待子进程

    name 进程名称

    is_alicve是否存活

    terminate终止进程

    pid 获取进程id

 

posted @ 2018-11-07 20:56  Milford  阅读(359)  评论(0编辑  收藏  举报