【代码学习】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----

 

posted @ 2017-07-31 15:58  水清云影  阅读(205)  评论(0编辑  收藏  举报