VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • python基础(32):进程(二)(2)

[p.join() for p in p_lst]
  • print('父进程在执行')
  • 多个进程同时运行,再谈join方法(2):

    
    						
    1. import time
    2. from multiprocessing import Process
    3.  
    4. def f(name):
    5. print('hello', name)
    6. time.sleep(1)
    7.  
    8. if __name__ == '__main__':
    9. p_lst = []
    10. for i in range(5):
    11. p = Process(target=f, args=('bob',))
    12. p.start()
    13. p_lst.append(p)
    14. # [p.join() for p in p_lst]
    15. print('父进程在执行')

    除了上面这些开启进程的方法,还有一种以继承Process类的形式开启进程的方式。

    
    						
    1. import os
    2. from multiprocessing import Process
    3.  
    4. class MyProcess(Process):
    5. def __init__(self,name):
    6. super().__init__()
    7. self.name=name
    8. def run(self):
    9. print(os.getpid())
    10. print('%s 正在和女主播聊天' %self.name)
    11.  
    12. p1=MyProcess('wupeiqi')
    13. p2=MyProcess('yuanhao')
    14. p3=MyProcess('nezha')
    15.  
    16. p1.start() #start会自动调用run
    17. p2.start()
    18. # p2.run()
    19. p3.start()
    20.  
    21. p1.join()
    22. p2.join()
    23. p3.join()
    24.  
    25. print('主线程')

    进程之间的数据隔离问题:

    
    						
    1. from multiprocessing import Process
    2.  
    3. def work():
    4. global n
    5. n=0
    6. print('子进程内: ',n)
    7.  
    8.  
    9. if __name__ == '__main__':
    10. n = 100
    11. p=Process(target=work)
    12. p.start()
    13. print('主进程内: ',n)

    1.1.3 守护进程

    会随着主进程的结束而结束。

    主进程创建守护进程:

    1.守护进程会在主进程代码执行结束后就终止

    2.守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children

    注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止

    守护进程的启动:

    
    						
    1. import os
    2. import time
    3. from multiprocessing import Process
    4.  
    5. class Myprocess(Process):
    6. def __init__(self,person):
    7. super().__init__()
    8. self.person = person
    9. def run(self):
    10. print(os.getpid(),self.name)
    11. print('%s正在和女主播聊天' %self.person)
    12.  
    13. p=Myprocess('哪吒')
    14. p.daemon=True #一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
    15. p.start()
    16. time.sleep(10) # 在sleep时查看进程id对应的进程ps -ef|grep id
    17. print('')

    主进程代码执行结束守护进程立即结束:

    
    						
    1. from multiprocessing import Process
    2.  
    3. def foo():
    4. print(123)
    5. time.sleep(1)
    6. print("end123")
    7.  
    8. def bar():
    9. print(456)
    10. time.sleep(3)
    11. print("end456")
    12.  
    13. p1=Process(target=foo
    
    相关教程