接口测试-并发处理

1 多线程执行

import threading
from datetime import *

def test():
    print(datetime.now())

def thd():
    Theaders = []
    for i in range(10): t = threading.Thread(target=test) Theaders.append(t) for t in Theaders: t.start() if __name__ == '__main__': thd()

如果要并发执行N次,建议将并发数拆分成n次,每个线程循环执行n次函数,这样在启动下一个线程的时候,上一个线程已经在循环执行了。

import threading
from datetime import *

def test():
    print(datetime.now())

def looptest():
    for i in range(50):
        test()

def thd(): Threads= [] for i in range(100): t = threading.Thread(target=looptest) Threads.append(t) for t in Threads: t.start() if __name__ == '__main__': thd()

2 守护线程

上面创建的线程是main()线程的子线程,即先启动主线程main(),然后执行thd自动子线程。

守护线程则是在主线程执行完后,所有的子线程都被关闭(无论子线程是否执行完成)。默认是没有守护线程,主线程执行完毕之后,会等待子线程全部执行完毕,才会结束程序。如果当子线程死循环,程序将不会关闭,因此在测试时可以设置守护线程解决这个问题。

import threading
from datetime import *

def test():
    print(datetime.now())

def looptest():
    for i in range(50):
        test()

def thd(): Threads= [] for i in range(1): t = threading.Thread(target=looptest) Threads.append(t) t.setDaemon(True) for t in Threads: t.start() if __name__ == '__main__': thd()

3 阻塞线程

还可以通过子线程join()方法阻塞线程,让主线程等待子线程完成之后再往下执行,等主线程执行完毕后在关闭所有子线程。

并且可以通过join()的timeout参数来控制,如果超过时间子线程未完成,则主线程继续执行,执行完成后关闭子线程。

import threading
from datetime import *

def test():
    print(datetime.now())

def looptest():
    for i in range(50):
        test()

def thd(): Threads= [] for i in range(1): t = threading.Thread(target=looptest) Threads.append(t) t.setDaemon(True) for t in Threads: t.start() for t in Threads: t.join(1) if __name__ == '__main__': thd()

超时机制:完成第一个线程的超时之后开始计算第二个线程的超时,如果执行10个线程超时时间就是10秒。一般不推荐用timeout参数,而是在函数内加上超时判断。

阻塞线程的主要意义在于控制子线程与主线程的执行顺序。

 

转载于:https://www.cnblogs.com/cirr-zhou/p/9385201.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值