进程与进程之间的数据是隔离的,内存空间是不能共享的所以要想进行通信,必须借助其他手段,那么如何去运用呢,下面我们就来看看吧!
进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术
这个技术是为了避免进程A写入进程B的情况发生。 进程的隔离实现,使用了虚拟地址空间。进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B
进程隔离的安全性通过禁止进程间内存的访问可以方便实现
代码验证
from multiprocessing import Process
n=100 defwork(): global n
n=0 print('子进程内: ',n)if __name__ == '__main__':
p=Process(target=work)
p.start()
print('主进程内: ',n)
守护进程
会随着主进程的结束而结束,通俗点的说类似于古代的君王和服侍君王的太监,妃子等一干人,只要君王死了其他人都得陪葬一起翘辫子~
主进程创建守护进程
其一:守护进程会在主进程代码执行结束后就终止
其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children
注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止
import osimport timefrom multiprocessing import ProcessclassMyprocess(Process): def__init__(self,person): super().__init__()
self.person = person
defrun(self): print(os.getpid(),self.name)
print('%s正在和女主播聊天' %self.person)
p=Myprocess('炮王')
p.daemon=True # 一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行p.start()
time.sleep(10) # 在sleep时查看进程id对应的进程ps -ef|grep idprint('主')
迷惑人的小例子
from multiprocessing import Processdeffoo(): print(123)
time.sleep(1)
print("end123")defbar(): print(456)
time.sleep(3)
print("end456")
p1=Process(target=foo)
p2=Process(target=bar)
p1.daemon=Truep1.start()
p2.start()
time.sleep(0.1)
print("main-------")#打印该行则主进程代码结束,则守护进程p1应该被终止.#可能会有p1任务执行的打印信息123,因为主进程打印main----时,p1也执行了,但是随即被终止.
领取专属 10元无门槛券
私享最新 技术干货