#一 操作系统的作用:
1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口
2:管理、调度进程,并且将多个进程对硬件的竞争变得有序
#二 多道技术:
1.产生背景:针对单核,实现并发
ps:
现在的主机一般是多核,那么每个核都会利用多道技术
有4个cpu,运行于cpu1的某个程序遇到io阻塞,会等到io结束再重新调度,会被调度到4个
cpu中的任意一个,具体由操作系统调度算法决定。
2.空间上的复用:如内存中同时有多道程序
3.时间上的复用:复用一个cpu的时间片
强调:遇到io切,占用cpu时间过长也切,核心在于切之前将进程的状态保存下来,这样
才能保证下次切换回来时,能基于上次切走的位置继续运行
http://www.cnblogs.com/Eva-J/articles/8253549.html#_label2
import os
import time
from multiprocessing import Process
def func(args,args2):
print(args,args2)
time.sleep(3)
print('子进程 :', os.getpid())
print('子进程的父进程 :', os.getppid())
print(12345)
if __name__ == '__main__':
p = Process(target=func,args=('参数','参数2')) # 注册
# p是一个进程对象,还没有启动进程
p.start() # 开启了一个子进程
print('*'*10)
print('父进程 :',os.getpid()) # 查看当前进程的进程号
print('父进程的父进程 :',os.getppid()) # 查看当前进程的父进程
# 进程的生命周期
# 主进程
# 子进程
# 开启了子进程的主进程 :
# 主进程自己的代码如果长,等待自己的代码执行结束,
# 子进程的执行时间长,主进程会在主进程代码执行完毕之后等待子进程执行完毕之后 主进程才结束
开启多个子进程
import os
import time
from multiprocessing import Process
def func(filename,content):
with open(filename,'w') as f:
f.write(content*10*'*')
if __name__ == '__main__':
p_lst = []
for i in range(10):
p = Process(target=func,args=('info%s'%i,0))
p_lst.append(p)
p.start()
for p in p_lst:p.join() # 之前的所有进程必须在这里都执行完才能执行下面的代码
print([i for i in os.walk(r'E:\python10\day37')])
#同步 0.1 * 500 = 50
#异步 500 0.1 = 0.1
#多进程写文件
#首先往文件夹中写文件
#向用户展示写入文件之后文件夹中所有的文件名```
开启多进程第二种方法
import os
from multiprocessing import Process
class MyProcess(Process):
def __init__(self,arg1,arg2):
super().__init__()
self.arg1 = arg1
self.arg2 = arg2
def run(self):
print(self.pid)
print(self.name)
print(self.arg1)
print(self.arg2)
if __name__ == '__main__':
p1 = MyProcess(1,2)
p1.start()
p2 = MyProcess(3,4)
p2.start()
# 自定义类 继承Process类
# 必须实现一个run方法,run方法中是在子进程中执行的代码
多进程之间的数据隔离
# 进程 与 进程之间
import os
from multiprocessing import Process
def func():
global n # 声明了一个全局变量
n = 0 # 重新定义了一个n
print('pid : %s'%os.getpid(),n)
if __name__ == '__main__':
n = 100
p = Process(target=func)
p.start()
p.join()
print(os.getpid(),n)