• pythonNet 05 进程


    前情回顾
    1.epoll模型 : 效率高 , 触发方式更多
    2.本地套接字  AF_UNIX  本地两个进程间的消息通信
    3.多任务编程
          * 并行 和 并发
          * 进程 线程
    4. 多进程编程
           时间片  PCB   PID  父子进程  优先级 进程特征
           进程状态: 就绪态  运行态  等待态
    5. ps -aux   ps  -ajx    pstree  top   nice
    6. os.fork()
    7. os.getpid()  os.getppid()
       os._exit()   sys.exit()
    8. 孤儿进程和僵尸进程
    ****************************************************

    如何避免僵尸进程产生
        * 处理子进程退出状态
     pid,status = os.wait()
     功能 :在父进程中阻塞等待处理子进程退出
            返回值: pid 退出的子进程的PID号
              status  获取子进程退出状态
           
     pid,status = os.waitpid(pid,option)
     功能 :在父进程中阻塞等待处理子进程退出
     参数 : pid  -1 表示等待任意子进程退出
                  >0 表示等待对应PID号的子进程退出
      option  0 表示阻塞等待
              WNOHANG 表示非阻塞
            返回值: pid 退出的子进程的PID号
              status  获取子进程退出状态
     
     waitpid(-1,0)  ===> wait()

        * 让父进程先退出
           1. 父进程创建子进程等待子进程退出
           2. 子进程创建二级子进程后立即退出
           3. 二级子进程称为孤儿,和原来的父进程各自执行    事件

    聊天室

    功能 : 类似qq群聊
    1. 进入聊天室需要输入姓名,姓名不能重复
    2. 有人进入聊天室会向其他人发送通知
       xxx 进入了聊天室
    3. 一个人发消息,其他人会收到消息
       xxx 说 : xxxxxxxx
    4. 某人退出聊天室,其他人也会收到通知
       xxx 退出了聊天室
    5. 管理员喊话 服务端发送消息所有的客户端都就收到
       管理员说 :xxxxxx

    功能模型 : 转发
    需要的技术 : 套接字通信 udp套接字
    用户存储 : 字典或列表
    消息收发的随意性 : 多进程

    代码设计
    1.封装 将每个功能封装为函数
    2.接口测试 (每实现一步就测试一步)

    代码编写流程
    搭建网络连接 --》 创建多进程---》每个进程功能编写--》项目功能模块实现

    进入聊天室
    客户端 : 输入姓名  将信息发给服务端(L name)
              等待服务端回复    根据回复判断是否登录成功

    服务端 : 接收请求信息  判断请求类型 
              判断用户名是否存在   如果存在回复不能登录
       如果不存在回复可以登录并插入到数据结构
              发送通知给其他用户

    聊天
    客户端 : 创建父子进程   发送聊天请求/接收聊天信息
    服务端 : 接收请求信息  将消息转发给其他客户端

    退出

    管理员消息

    multiprocessing 模块创建进程

    1. 需要将要执行的事情封装为函数
    2. 使用multiprocessing模块中Process类创建进程对象
    3. 通过对象属性设置和Process的初始化函数对进程进行设置,绑定要执行的函数
    4. 启动进程,会自动执行进程绑定的函数
    5. 完成进程的回收


    Process()
    功能 : 创建进程对象
    参数 : name  进程名称  Process-1
            target  绑定函数
     args  元组  给target函数按照位置传参
            kwargs  字典  给target函数按照键值对传参

    p.start()
    功能:启动进程
    * target函数会自动执行,此时进程真正被创建

    p.join([timeout])
    功能 : 阻塞等待回收子进程
    参数 : 超时时间

    * 使用multiprocessing创建子进程,同样子进程复制父进程的全部代码段,父子进程各自执行互不影响,父子进程有各自的运行空间

    * 如果不使用join回收子进程则子进程退出后会成为僵尸进程
    * 使用multiprocessing创建子进程往往父进程只是用来创建进程回收进程

  • 相关阅读:
    poj--2031--Building a Space Station(prime)
    nyoj--364--田忌赛马(贪心)
    nyoj--496--巡回赛(拓扑排序)
    nyoj--1100--WAJUEJI which home strong!(bfs)
    hdoj--5625--Clarke and chemistry(枚举)
    poj--1753--Flip Game(dfs好题)
    poj--1101--The Game(bfs)
    冒泡排序
    php常见错误
    php乱码
  • 原文地址:https://www.cnblogs.com/sky-ai/p/9832434.html
Copyright © 2020-2023  润新知