使用Python对Web服务进行并发测试
我有一个网络服务,需要处理大量的同时使用和数据量,我需要对它进行测试。因为这个服务比较专业,不太适合用普通的测试框架。测试需要模拟多个客户端同时向一个网址发送请求,解析返回的Http响应,检查数据库是否更新正确,并确保某些邮件已经正确发送和接收。
我公司现在的看法是让我用Python来写这个测试框架。我之前从没用过Python进行多线程编程,研究的时候我发现了一个叫做全局解释器锁(GIL)的东西,似乎是Python处理并发的基础。我的感觉是,GIL会阻止Python在多处理器的机器上实现真正的并发。这是真的吗?如果我用编译器把Python编译成本地代码,这种情况会改变吗?我是不是完全走错了方向,Python真的不适合这个工作吗?
3 个回答
假设网络条件比较一般,只要你的系统资源足够,Python的普通线程模块就能让你模拟出比真实工作负载更高的并发处理能力。
你可以使用Python的多进程库来实现这个功能。这个库可以让你同时运行多个任务,提升程序的效率。想了解更多,可以查看这个链接:http://docs.python.org/library/multiprocessing.html
全局解释器锁(GIL)会阻止多个线程同时执行Python代码。即使把Python代码编译成字节码,这个情况也不会改变,因为字节码还是由Python解释器来运行,而解释器会强制执行GIL。threading
模块通过每执行sys.getcheckinterval()
个字节码来切换线程。
不过,这个限制不适用于multiprocessing
,因为它是创建多个Python 进程,而不是线程。你可以根据系统的支持程度,创建尽可能多的进程,它们可以真正地同时运行。
所以,是的,你可以在Python中做到这一点,可以使用threading
或者multiprocessing
。