首页 > 其他 > 详细

昨日回顾

时间:2019-09-16 16:38:56      阅读:61      评论:0      收藏:0      [点我收藏+]

昨日回顾

多道技术:

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

? 时间复用:公用一个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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!