多任务(Linux环境下)
1.进程的创建
os.fork() 创建一个进程
import os
ret = os.fork() # 创建一个新的进程
print("haha")
结果为
haha
haha
import os
import time
ret = os.fork() # 创建一个返回值等于0的子进程,而父进程是一个大于0的值
if ret == 0:
while True:
print("---1---")
time.sleep(1)
else:
while True:
print("---2---")
time.sleep(1)
结果为:
---1---
---2---
---1---
---2---
---1---
---2---
---1---
---2---
....
os.getpid() # 获取父进程创建的子进程的id
os.getppid() #获取父进程的id
import os
ret = os.fork()
print(0)
if ret > 0:
print("---父进程---%d" %os.getpid())
else:
print("---子进程---%d--%d" %(os.getpid(), os.getppid()))
结果为
20570
---父进程---20569
0
---子进程---20570--20569
父进程中fork的返回值,就是刚刚创建出来的子进程的id
2.父子进程的先后顺序
父进程执行完,父进程结束,不会等待子进程结束完才结束
import os
import time
ret = os.fork()
if ret == 0:
print("---子进程---")
time.sleep(5)
print(---子进程over---)
else:
print("---父进程---")
time.sleep(3)
print("over")
结果为
---父进程---
over
---子进程---
---子进程over---
over
3.多个进程中,数据不共享
import os
import time
g_num = 100
ret = os.fork()
if ret == 0:
print("---process1---")
g_num +=1
print("---process1---%d" %g_num)
else:
time.slepp(3)
print("---process---")
print("---process2---%d" %g_num)
结果为
---process1---
---process1---101
---process2---
---process2---100
4.多个fork
看入下代码
import os
import time
ret = os.fork() # 创建了一个进程,现在有两个进程
if ret == 0:
print("---1---")
else:
print('---2---')
ret = os.fork() # 两个进程分别创建了一个进程,现在有四个进程
if ret == 0:
print('---11---')
else:
print('---22---')
结果为:
---2---
---22---
---11---
---1---
---22---
---11---
再看如下代码
import os
import time
ret = os.fork() # 创建了一个进程,现在有两个进程
if ret == 0:
print("---1---")
else:
print('---2---')
ret = os.fork() # 一个进程创建了一个进程,现在有三个进程
if ret == 0:
print('---11---')
else:
print('---22---')
结果为:
---2---
---22---
---1---
---11---