python之多进程并发测试
一、进程是什么?
一个程序运行后,代码+用到的资源称为进程。
进程有四种状态:工作,就绪,执行,等待
进程:比如一个电脑可以同时启动多个软件
线程:比如一个QQ可以开多个窗口
定义不同:进程是系统分配资源的单位;而线程是进程的一个实体。
其实当我们需要用python进行性能测试的时候,使用线程和进程都不太合适。一般会用协程。协程的并发可以开到1万!
二、使用步骤
1.引入库
代码如下(示例):
from multiprocessing import Process
import os
a = 0
def work1():
global a
for i in range(100000):
a += 1
print("子进程号{}--work2------a:", os.getpid(), a)
print('父进程id:',os.getppid())#获取当前进程号
def work2():
global a
for i in range(100000):
a += 1
print("子进程号{}--work2------a:", os.getpid(),a)
print('父进程id:', os.getppid())
def mian():
# 参数,daemon=True,设置进程是否作为守护进程,如果是守护进程,那么该子进程会同主进程一起被关闭
# p = Process(target=work1,daemon=True)
p = Process(target=work1)#创建一个子进程
p.start()
p2 = Process(target=work2)#创建一个子进程
p2.start()
# p.join()
# p2.join()
if __name__ == '__main__':
# 注意点:windows下 程序中如果有使用多进程,程序的入口一定要写在 if __name__ == '__main__'里面:
print('主进程a:',os.getpid(), a)
mian()
实战:
# 多进程测试,参数分别为进程数和测试函数
def atest_process(Process_MAX, Test_Script):
process_list = []
for i in range(int(Process_MAX)):
process_name = 'process-' + str(i)
new_process = mp.Process(target=Test_Script, args=(), name=process_name)
process_list.append(new_process)
new_process.start()
for process_obj in process_list:
process_obj.join()