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