zoukankan      html  css  js  c++  java
  • 【代码学习】PYTHON 进程

    一、进程和程序的区别

      编写完毕的代码,在没有运行的时候称之为程序

      正在运行的代码,称之为进程

      进程除了包含的代码意外,还需要运行的环境等

    二、fork

    import os
    import time
    # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以
    ret = os.fork()
    if ret == 0:
        while True:
            print ("----1----")
            time.sleep(1)
    else:
        while True:
                    print ("----2----")
                    time.sleep(1)

    以上代码运行结果:

    ----2----
    ----1----
    ----2----
    ----1----
    ----2----
    ----1----
    ----2----
    ----1----
    ----2----
    ----1----

    注意:

    >0 为主(父)进程  ==0位子进程

    1、fork函数,只在Unix/Linux/Mac上运行,windows不可以

    2、程序执行到os.fork()时,操作系统会创建一个新的进程(子进程),然后复制父进程的所有信息到子进程中

    三、getpid()和getppid()

    1、getpid()获取当前进程的ID值

    2、getppid()获取子进程中父进程ID号

      1 import os
      2 rpid = os.fork()
      3 print ("父子进程都可以执行这里的代码")
      4 if rpid < 0:
      5     print ("fork调用失败")
      6 elif  rpid == 0:
      7     print ("我是子进程(%s),我是父进程(%s)"%(os.getpid(),os.getppid()))
      8 else:
      9     print ("我是父进程(%s),我是父进程(%s)"%(os.getpid(),rpid))
     10 print ("父子进程都可以执行这里的代码")

    以上代码运行结果

    我是父进程(6811),我是父进程(6812)
    父子进程都可以执行这里的代码
    root:~$ 我是子进程(6812),我是父进程(4788)
    父子进程都可以执行这里的代码

     四、父子进程的执行顺序

    父进程、子进程执行顺序没有规律,完全取决于操作系统的调度算法

    五、多进程修改全局变量

    多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响

    import os
    import time
    g_num = 100
    ret = os.fork()
    if ret ==0:
        print ("----process-1----")
        g_num += 1
        print ("----process-1 g_num=%d----"%g_num)
    else:
        time.sleep(3)
        print ("----process-2----")
        print ("----process-2 g_num=%d----"%g_num)

    以上代码运行结果:

    ----process-1----
    ----process-1 g_num=101----
    ----process-2----
    ----process-2 g_num=100----

    六、多个fork问题

    import os
    os.fork()
    os.fork()
    os.fork()
    print ("----1----")

    以上代码运行结果:

    ----1----
    ----1----
    ----1----
    ----1----
  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/sqyysec/p/7263560.html
Copyright © 2011-2022 走看看