python学习 —— 多线程发送请求测试服务器压力
Posted darkchii
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习 —— 多线程发送请求测试服务器压力相关的知识,希望对你有一定的参考价值。
以前写过的python多线程终于派上用场了,其实还没开始测试,但下周会使用这个脚本测试一下,虽然boss让我用C++来做:
# coding=utf-8 import random import string import threading import time from requests import post class MultiThread(threading.Thread): def __init__(self, url, qlock): threading.Thread.__init__(self) self.url = url self.qlock = qlock def run(self): send_requests(self.url, self.qlock) def send_requests(url, qlock): """ :param url: http://xxx :param qlock: 线程锁 :return: """ qlock.acquire() nums = ‘0123456789‘ try: json = { ‘longitude‘: ‘‘.join(random.sample(nums + string.digits, 3)) + ‘.‘ + ‘‘.join(random.sample(nums + string.digits, 10)), ‘latitude‘: ‘‘.join(random.sample(nums + string.digits, 2)) + ‘.‘ + ‘‘.join(random.sample(nums + string.digits, 10)), ‘subTime‘: time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime()), ‘machineId‘: ‘‘.join(random.sample(string.ascii_letters + string.digits, 6)) } r = post(url, json=json, timeout=1) print r.status_code # print r.text finally: qlock.release() def run_thread(url, concurrency): """ :param url: http://xxx :param concurrency: 并发数 :return: """ lock = threading.Lock() threads = [] for cncu in range(1, concurrency): t = MultiThread(url, lock) t.daemon = True t.start() threads.append(t) for t in threads: t.join() if __name__ == ‘__main__‘: url = ‘http://xxx‘ for i in range(0, 1000000): run_thread(url, 10)
其实我不太明白如果用C++来做在做压力测试会更好吗?虽然众所周知python的多线程是假的(GIL锁),不管开了多少个线程,实际上也只有1个线程在跑。。。C++多线程当然性能更好,但我个人总觉得做压力测试貌似用不上C++?
个人对这两门语言的认识是这样的:python是解释型语言,所以每次运行都需要解释器边解释边运行(我记得python为了解决这个问题 --- 提高性能,所以会生成一些配置文件,如果代码没有改动,那么就按上次运行的过程执行 --- 貌似是这样 = =);而C/C++通过编译器生成的可执行文件在运行时可能会需要调用一些动态链接库(dll),但不需要每次运行都编译一遍,所以性能上是优秀的。
这一块完全是自己的知识盲区(学习深度还是不够),如果有很懂的同学,还望能不吝教指!
以上是关于python学习 —— 多线程发送请求测试服务器压力的主要内容,如果未能解决你的问题,请参考以下文章