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队列####################