python之系统编程 --进程

1.调试(PDB)

代码:

[root@master gaoji]# vim test2.py
  1 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 def getAverage(a,b):
  5     result = a + b
  6     print("result=%d" %result)
  7     return result
  8 
  9 a = 100
 10 b = 200
 11 c = a + b
 12 ret = getAverage(a,b)
 13 print(ret)
[root@master gaoji]# python3 -m pdb test2.py 
> /home/weixin/gaoji/test2.py(4)<module>()
-> def getAverage(a,b):
(Pdb) l
  1     #!/usr/local/bin/python3
  2     # -*- coding:utf-8 -*-
  3  
  4  -> def getAverage(a,b):
  5         result = a + b
  6         print("result=%d" %result)
  7         return result
  8  
  9     a = 100
 10     b = 200
 11     c = a + b
(Pdb) 

################################进程########################

多任务理解:

 ##########父进程与子进程的先后顺序理解################

[root@master process]# vim 01-进程.py     
  1 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 import os
  5 import time
  6 ret = os.fork()
  7 
  8 if ret == 0:
  9     print('---子进程1---')
 10     time.sleep(5)
 11     print('---子进程2---')
 12 else:
 13     print('---父进程---')
 14     time.sleep(3)
 15 
 16 print('---over---')

执行结果:

总结下:ret 的值有两个,一个是等于0,一个是大于0;说白点就是执行了两遍

#################全局变量在多进程中不共享##############

[root@master 进程]# vim 02-进程.py     
  1 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 
  5 import os-
  6 import time
  7 g_sum = 100
  8 
  9 pid = os.fork()
 10 if pid == 0:
 11     print('---process-01---')
 12     g_sum += 1
 13     print('---process-01--%d' %g_sum)
 14 else:
 15     time.sleep(3)                    ###为了保证让子进程优先运行
 16     print('---process-02---')
 17     print('---process-02--%d' %g_sum)
 18 

执行结果:

[root@master 进程]# python3 02-进程.py 
---process-01---
---process-01--101
---process-02---
---process-02--100        ###结果还是100,并没与变成101

 #############多个fork###########

代码:

[root@master process]# cat 01-进程.py 
#!/usr/local/bin/python3
# -*- coding:utf-8 -*-

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---')

####最后一共有四个进程#####

执行结果:

[root@master process]# python3 01-进程.py 
---2---
---22---
---11---
---1---
---22---
---11---

另外一种:

执行结果:

[root@master process]# python3  01-进程.py    
---2---
---22---
---11---
---1---

##########多个fork2#################

执行结果:

[root@master process]# python3 03-进程.py 
---1---
---1---
---1---
---1---
---1---
---1---
---1---
---1---
[root@master process]# python3 03-进程.py |wc -l
8

 ###########fork炸弹(千万别玩这个,等于自杀)##########

 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 
  5 import os-
  6 
  7 os.fork()
  8 os.fork()
  9 
 10 while True:
 11     os.fork()

##########process创建子进程(这个可以跨平台,比fork好用,推荐使用)############

[root@master process]# vim 04-process子进程.py     
  1 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 
  5 from  multiprocessing import Process
  6 
  7 import time
  8 def test():
  9     while True:
 10         print('---test---')
 11         time.sleep(1)
 12 
 13 p = Process(target=test)  ###创建子进程
 14 p.start()          ###让这个进程开始执行test函数
 15 
 16 while True:
 17     print('---main---')
 18     time.sleep(1)

执行结果:

[root@master process]# python3 04-process子进程.py   ###主进程去执行---main---,子进程去执行test()函数
---main---
---test---
---main---
---test---
---main---
---test---
---main---
---test---
---main---
---test---
---main---
---test---

####################通过process 创建的子进程,主进程会等待子进程的结束(fork 不会等待)###########

[root@master process]# vim 05-process子进程.py
  1 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 
  5 from  multiprocessing import Process
  6 
  7 import time
  8 def test():
  9     for i in range(4):
 10         print('---test---')
 11         time.sleep(1)
 12 
 13 p = Process(target=test)
 14 p.start()
 15 
 16 print('---11---')

执行结果:

[root@master process]# python3 05-process子进程.py
---11---
---test---
---test---
---test---
---test---
[root@master process]#      ###在子进程所有执行完才出现[root@master process]#  说明,是主进程在等待子进程的结束

############join 的作用#################

###如果想让子进程的语句执行完再执行主进程的语句####

[root@master process]# vim 05-process子进程.py    
  1 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 
  5 from  multiprocessing import Process
  6 
  7 import time
  8 import random
  9 def test():
 10     for i in range(random.randint(1,5)):
 11         print('---test---')
 12         time.sleep(1)
 13 
 14 p = Process(target=test)
 15 p.start()
 16 p.join()      ###称为堵塞
 17 print('---main---')

执行结果:

[root@master process]# python3 05-process子进程.py
---test---
---main---
[root@master process]# python3 05-process子进程.py
---test---
---test---
---main---         ####‘---main---’总是在子进程执行完才执行主进程,主要是join这个方法

#############通过process 的子类创建子进程############

[root@master process]# vim 06-process子进程.py     
  1 #!/usr/local/bin/python3
  2 # -*- coding:utf-8 -*-
  3 
  4 
  5 from multiprocessing import Process
  6 
  7 import time
  8 class Process_zilei(Process):           ####通过继承父类,父类一定有start()方法,start()方法里面会调用run方法,通过方法重写run方法
  9     def run(self):
 10         while True:
 11             print('---1---')
 12             time.sleep(1)
 13 
 14 p = Process_zilei()
 15 p.start()
 16 
 17 
 18 while True:
 19     print('---main---')
 20     time.sleep(1)

##############进程池(多任务,一般都试用这种方法)################

池一般是缓冲用的

 

 ##############进程间通信-queue队列####################

原文地址:https://www.cnblogs.com/shanhua-fu/p/7727931.html