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),但不需要每次运行都编译一遍,所以性能上是优秀的。

  这一块完全是自己的知识盲区(学习深度还是不够),如果有很懂的同学,还望能不吝教指!

  

原文地址:https://www.cnblogs.com/darkchii/p/9026740.html

时间: 2024-11-05 18:35:25

python学习 —— 多线程发送请求测试服务器压力的相关文章

php使用curl模拟多线程发送请求

每个PHP文件的执行是单线程的,但是php本身也可以用一些别的技术实现多线程并发比如用php-fpm进程,这里用curl模拟多线程发送请求.php的curl多线程是通过不断调用curl_multi_exec来获取内容,这里举一个demo来模拟一次curl多线程并发操作. 1 /** 2 * Subject:php模拟多线程请求curl返回结果 3 * User: luokakale 4 * Date: 2018/11/3 5 * Time: 11:14 6 */ 7 8 //设置缓冲为0(也可以

python学习笔记(threading性能压力测试)

又是新的一周 延续上周的进度 关于多进程的学习 今天实践下 初步设计的接口性能压力测试代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf_8 -*- 3 4 import threading 5 import requests 6 import time 7 import re 8 from time import sleep 9 10 # -------接口性能测试配置------- 11 method = "post" 12 # 接口

Python 学习——多线程

使用Threading模块创建线程: threading模块有Thread类实现threading.Thread类提供的方法如下: run():线程的入口点 start():调用run方法启动线程 join(time):等待线程结束 isAlive():检查一个线程是否仍旧在执行 getName():返回线程的名字 setName():设置一个线程的名字 要使用threading模块实现一个新线程,你得先如下做: 定义Thread类的一个子类. 重写__init__(self,[,args])方

python学习——多线程

多任务可以由多进程完成,也可以由一个进程内的多线程完成. 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程. 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程. Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装.绝大多数情况下,我们只需要使用thread

大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url, **kwargs)-->session.request(method="get", url=url, **kwargs)-->session.send(request, **kwargs)-->adapter.send(request, **kwargs)-->

自己实现异步发送请求和图片

异步发送比同步发送请求有不阻塞主线程和支持多线程发送请求的好处. 异步发送请求可以抽象为标准的代理对象,具有使用方便,可扩充性强,只要你足够牛可以写出比第三方控件更牛的发送模块,由于是你自己写的,可以根据自己的意愿对请求的各种细节进行处理.这个异步发送请求处理模块也是对苹果代理具体实现的经典案例. chttpsendAsynchronousRequest.h #import <Foundation/Foundation.h> @protocol chttpsendAsynchronousDel

利用python httplib模块 发送Post请求测试web服务是否正常起来!

最近在学习python,恰好老大最近让我搞个基于post请求测试web服务是否正常启用的小监控,上网查了下资料,发现强大的Python恰好能够用上,所以自己现学现卖,顺便锻炼下自己. 由于本人也刚接触这块不久属于菜鸟级别,所以在任务之前,只能上网把基于post请求的web监控了解清楚,这些资料网上很多,因为本人认为完成这类任务最重要的就是要将实现的原理研究清楚,写程序只是实现的工具,如果大的逻辑不正确,后面的都是白忙活. 了解post发送请求的原理后,利用Python的httplib模块进行逻辑

Python使用grequests并发发送请求

目录 前言 grequests简单使用 grequests和requests性能对比 异常处理 前言 requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快.但是requests发送请求是串行的,即阻塞的.发送完一条请求才能发送另一条请求. 为了提升测试效率,一般我们需要并行发送请求.这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦. grequests是K神基于gevent+requests编写的一个并发发送请求的库,

python学习笔记[3]-邮件的发送

本文摘抄自:http://www.cnblogs.com/xiaowuyi/archive/2012/03/17/2404015.html 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:    1.smtplib模块 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])   SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行