• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
谢城
博客园    首页    新随笔    联系   管理    订阅  订阅

学习总结(三十二)

1.多进程

        1)什么是多进程

                一个正在运行的程序就是进程,是程序执行具体过程的一种表现,一个程序多次执行,就会产生多个进程,但是进程之间相互独立

2.阻塞 非阻塞 并行 并发

        1)阻塞:程序遇到io操作就会进入阻塞状态

                本地IO input print sleep read write

                网络IO recv send

        2)非阻塞:程序正常运行中没有任何的IO操作,就处于非阻塞状态

        3)并发:多个任务看起来同时在处理,本质上是切换执行,速度非常快

        4)并行:多个任务真正的同时执行,必须具备多核cpu才能并行

         阻塞 非阻塞 说的程序运行的状态

         并发 并行 说的是任务的处理方式

 

3.进程的两种使用方式

第一种方式

from multiprocessing import Process
import os

def task():
    print("子进程run")
    print(os.getpid())


if __name__ == '__main__':
    print(os.getpid())
    p=Process(target=task,args=("xiecheng"))
    p.start()

    print("任务结束")

  

第二种方式

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

    def run(self):
        print(self.name)
        print("子进程 %s running!" % os.getpid())
        print("子进程%s over!" % os.getpid())
        # return  self.name
if __name__ == '__main__':
    p=myProcess("xiecheng").run()

    print(p,"父进程over")

  

 

 4.常用属性

# p.join() # 等待子进程结束
# p.terminate()  # 终止进程
# print(p.name)  # 进程的名称
# print(p.is_alive()) #是否存活
# p.terminate() # 与start一样 都是给操作系统发送指令 所以会有延迟
# print(p.exitcode) # 获取退出码

  

5.僵尸与孤儿进程

 

     1) 孤儿进程

                   指的是,父进程先结束 ,而子进程还在运行着,

                   孤儿进程无害,有 其存在的必要性

                   例如:qq开启了浏览器,qq先退出了 浏览器应该继续运行

                   孤儿进程会被操作系统接管

      2)僵尸进程

                  值得是,子进程已经结束了,但是操作系统会保存一些进程信息,如PID,运行时间等,此时这个进程就称之为僵尸进程

                  僵尸进程如果太多将会占用大量的资源,造成系统无法开启新新进程

                  linux 中有一个wai/waitpid 用于父进程回收子进程资源

                 python会自动回收僵尸进程

 

 

 

 

      

posted @ 2019-05-31 21:15  谢城  阅读(238)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3