进程+线程+协程
- 1 进程
- 1.1 无进程
- 1.2 多进程
- 1.3 p1.join()
- 1.4 权重
- 1.5 全局变量list
1 进程
1.1 无进程
不使用进程,task_01和task_02先后执行
python">
import os
import time
from multiprocessing import Processdef task_01():print("*"*8+' task_01 '+"*"*8)i = 0while True:time.sleep(0.5)print('task_01: %d'%i)i += 1if i>10:breakdef task_02():print("*"*8+' task_02 '+"*"*8)i = 0while True:time.sleep(1)print('task_02: %d'%i)i += 10if i>30:breakif __name__ == '__main__':print("*"*8+' 主程序开始 '+"*"*8)task_01()task_02()print("#" * 8 + ' 主程序结束 ' + "#" * 8)
‘’‘
## 运行结果
******** 主程序开始 ********
******** task_01 ********
task_01: 0
task_01: 1
task_01: 2
task_01: 3
task_01: 4
task_01: 5
task_01: 6
task_01: 7
task_01: 8
task_01: 9
task_01: 10
******** task_02 ********
task_02: 0
task_02: 10
task_02: 20
task_02: 30
######## 主程序结束 ########
Process finished with exit code 0
‘’‘
1.2 多进程
父程序和子程序各自执行,互不干扰。由于只有一个核,task_01和task_02交替执行。
python">import os
import time
from multiprocessing import Processdef task_01():print("*"*8+' task_01 '+"*"*8)i = 0while True:time.sleep(0.5)print('task_01: %d'%i)i += 1if i>10:breakdef task_02():print("*"*8+' task_02 '+"*"*8)i = 0while True:time.sleep(1)print('task_02: %d'%i)i += 10if i>100:breakif __name__ == '__main__':print("*"*8+' 主程序开始 '+"*"*8)p1 = Process(target = task_01,name="任务1") # 子程序实例化p2 = Process(target = task_02,name="任务2")p1.start() # 开启子程序p2.start()print("#" * 8 + ' 主程序结束 ' + "#" * 8)## 运行结果
'''
******** 主程序开始 ********
######## 主程序结束 ########
******** task_01 ********
******** task_02 ********
task_01: 0
task_02: 0
task_01: 1
task_01: 2
task_02: 10
task_01: 3
task_01: 4
task_02: 20
task_01: 5
task_01: 6
task_02: 30
task_01: 7
task_01: 8
task_02: 40
task_01: 9
task_01: 10
task_02: 50
task_02: 60
task_02: 70
task_02: 80
task_02: 90
task_02: 100Process finished with exit code 0
'''
1.3 p1.join()
p1.join() 表示主进程要等子进程执行完再执行p1.join()后面的代码
python">#
import os
import time
from multiprocessing import Processdef task_01(name,s):print("*"*8+' task_01 '+"*"*8)i = 0while True:time.sleep(s)print(' %s: task_01.id: %d, i: %d'%(name,os.getpid(),i))i += 1if i>40:breakdef task_02(name,s):print("*"*8+' task_02 '+"*"*8)j = 0while True:time.sleep(s)print(' %s: task_02.id: %d, j: %d'%(name,os.getpid(),j))j += 10if j>300:breakif __name__ == '__main__':print("*"*8+' 主程序开始 '+"*"*8)p1 = Process(target = task_01,name="任务1",args=("A",0.5)) # 给task_01传递参数p2 = Process(target = task_02,name="任务2",args=("B",1))count = 0p1.start() # 开启子程序p2.start()print('p1.name: ',p1.name)print('p2.name: ',p2.name)## 通过主程序控制子程序count = 0while True:time.sleep(0.3)count += 5print('count: ', count)if count== 50:p1.terminate()p2.terminate()breakprint("#" * 8 + ' 主程序结束 ' + "#" * 8)
‘’‘
******** 主程序开始 ********
p1.name: 任务1
p2.name: 任务2
******** task_01 ********
******** task_02 ********
count: 5
count: 10A: task_01.id: 3603, i: 0
count: 15A: task_01.id: 3603, i: 1B: task_02.id: 3604, j: 0
count: 20
count: 25A: task_01.id: 3603, i: 2
count: 30
count: 35B: task_02.id: 3604, j: 10A: task_01.id: 3603, i: 3
count: 40A: task_01.id: 3603, i: 4
count: 45
count: 50
######## 主程序结束 ########Process finished with exit code 0
‘’‘
1.4 权重
进程之间不共享权重
python">
import os
import time
from multiprocessing import Process
N = 1
def task_01(name,s):print("*"*8+' task_01 '+"*"*8)global Nwhile True:time.sleep(s)print(' %s: task_01.id: %d, N: %d'%(name,os.getpid(),N))N += 1if N>20:breakdef task_02(name,s):print("*"*8+' task_02 '+"*"*8)global Nwhile True:time.sleep(s)print(' %s: task_02.id: %d, N: %d'%(name,os.getpid(),N))N += 100if N>1000:breakif __name__ == '__main__':print("*"*8+' 主程序开始 '+"*"*8)p1 = Process(target = task_01,name="任务1",args=("A",0.5)) # 给task_01传递参数p2 = Process(target = task_02,name="任务2",args=("B",1))N = 100p1.start() # 开启子程序p2.start()print('p1.name: ',p1.name)print('p2.name: ',p2.name)print("#" * 8 + ' 主程序结束 ' + "#" * 8)
‘’‘
******** 主程序开始 ********
p1.name: 任务1
p2.name: 任务2
######## 主程序结束 ########
******** task_02 ********
******** task_01 ********A: task_01.id: 3710, N: 1B: task_02.id: 3711, N: 1A: task_01.id: 3710, N: 2A: task_01.id: 3710, N: 3B: task_02.id: 3711, N: 101A: task_01.id: 3710, N: 4A: task_01.id: 3710, N: 5B: task_02.id: 3711, N: 201A: task_01.id: 3710, N: 6A: task_01.id: 3710, N: 7B: task_02.id: 3711, N: 301A: task_01.id: 3710, N: 8A: task_01.id: 3710, N: 9B: task_02.id: 3711, N: 401A: task_01.id: 3710, N: 10A: task_01.id: 3710, N: 11B: task_02.id: 3711, N: 501A: task_01.id: 3710, N: 12A: task_01.id: 3710, N: 13B: task_02.id: 3711, N: 601A: task_01.id: 3710, N: 14A: task_01.id: 3710, N: 15B: task_02.id: 3711, N: 701A: task_01.id: 3710, N: 16A: task_01.id: 3710, N: 17B: task_02.id: 3711, N: 801A: task_01.id: 3710, N: 18A: task_01.id: 3710, N: 19B: task_02.id: 3711, N: 901A: task_01.id: 3710, N: 20Process finished with exit code 0
‘’‘
1.5 全局变量list
进程之间不共享全局变量list
python">#
import os
import time
import random
from multiprocessing import Process
N = []
def task_01(name,s):print("*"*8+' task_01 '+"*"*8)global Nwhile True:time.sleep(s)print(' {}: task_01.id: {}, N1: {}'.format(name,os.getpid(),N))N.append(-round(random.random(),1))if len(N)>9:breakdef task_02(name,s):print("*"*8+' task_02 '+"*"*8)global Nwhile True:time.sleep(s)print(' {}: task_02.id: {}, N2: {}'.format(name,os.getpid(),N))N.append(round(random.random())*100)if len(N)>8:breakif __name__ == '__main__':print("*"*8+' 主程序开始 '+"*"*8)p1 = Process(target = task_01,name="任务1",args=("A",0.5)) # 给task_01传递参数p2 = Process(target = task_02,name="任务2",args=("B",1))N = 100p1.start() # 开启子程序p2.start()print('p1.name: ',p1.name)print('p2.name: ',p2.name)print("#" * 8 + ' 主程序结束 ' + "#" * 8)time.sleep(10)print('NNNNNN: ', N)
‘’‘
******** 主程序开始 ********
p1.name: 任务1
p2.name: 任务2
######## 主程序结束 ########
******** task_01 **************** task_02 ********A: task_01.id: 3819, N1: []B: task_02.id: 3820, N2: []A: task_01.id: 3819, N1: [-0.8]A: task_01.id: 3819, N1: [-0.8, -0.7]A: task_01.id: 3819, N1: [-0.8, -0.7, -0.8] B: task_02.id: 3820, N2: [0]A: task_01.id: 3819, N1: [-0.8, -0.7, -0.8, -0.3]B: task_02.id: 3820, N2: [0, 0]A: task_01.id: 3819, N1: [-0.8, -0.7, -0.8, -0.3, -0.3]A: task_01.id: 3819, N1: [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5]B: task_02.id: 3820, N2: [0, 0, 100]A: task_01.id: 3819, N1: [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5, -0.3]A: task_01.id: 3819, N1: [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5, -0.3, -0.9]B: task_02.id: 3820, N2: [0, 0, 100, 100]A: task_01.id: 3819, N1: [-0.8, -0.7, -0.8, -0.3, -0.3, -0.5, -0.3, -0.9, -0.2]B: task_02.id: 3820, N2: [0, 0, 100, 100, 100]B: task_02.id: 3820, N2: [0, 0, 100, 100, 100, 100]B: task_02.id: 3820, N2: [0, 0, 100, 100, 100, 100, 0]B: task_02.id: 3820, N2: [0, 0, 100, 100, 100, 100, 0, 0]
NNNNNN: 100Process finished with exit code 0
‘’‘