昨日回顾

昨日回顾

多道技术:

​ 空间复用:多个程序公用一个内存条,彼此隔离,物理级别隔离

​ 时间复用:公用一个cpu

切换的情况:

​ io切,占用时间过长也切

串行:一个任务完完整整的运行结束,再运行下一个任务.

并发:看起来是同时执行多个任务 单核

并行:真正的做到了同时执行多个任务 多核

#开启子进程的方式
#####方式一
from multiprocessing import Process


def task():
    pass


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
##### 方式二

from multiprocessing import Process

class MyP(Process):
    def run(self):
        pass

if __name__ == '__main__':
    p = MyP()
    p.start() # 给操作系统发一个亲请求,操作系统去开进程
    print('sadf')

join回顾

from multiprocessing import Process
import time,os

def task(s):
    time.sleep(s)


if __name__ == '__main__':

    p1 = Process(target=task,args=(100,))
    p2 = Process(target=task,args=(2,))
    p3 = Process(target=task,args=(3,))

    p1.start()
    p2.start()
    p3.start()
    p1.join() # 等1s,
    p2.join() # 等1s,
    p3.join() # 等1s,内部会调用wait()
    print(p1.pid)
    print('子',p1.pid)
    print('主',os.getpid()) # 主进程要等待所有的子进程结束才会结束.因为主进程要在结束前回收僵尸进程.(*****)

僵尸进程: 没有死透的子进程

孤儿进程: 子进程运行的过程父进程死了就变成了孤儿进程,被进程init接管.

父进程一直不死,一直在开启子进程,意味着占用过过多的pid并且不回收.

解决方案: 强制杀死这个父进程.

守护进程

#本质也是进程
#主进程的代码执行完毕守护进程直接结束
#大前提:主进程结束前守护进程一直运行着
from multiprocessing import Process
import time
def task():
    print('守护进程  start')
    # time.sleep(4)
    print('守护进程  end')


if __name__ == '__main__':
    p = Process(target=task)
    p.daemon = True
    p.start()
    time.sleep(2)
    print('主')
原文地址:https://www.cnblogs.com/aden668/p/11527682.html