python多线程请求带参数的多个接口问题

目录
  • 多线程请求带参数的多个接口
  • 如何用python请求接口
  • 总结

多线程请求带参数的多个接口

对于进程/线程/携程/异步的内容 有时间准备写写了 真的一直用for去循环慢到怀疑人生 需要运用的场景也会很多 所以分开一点点总结一下

先上代码看一下内容,多线程请求接口

imoprt threading # 首先运用到threading模块

class BrushGifts:
    # 以下是两个相同的接口 send_gift_room_one()是送礼的接口
    # 也就是说我想完成的状态是A送B B送A 两个用户同时想对方赠送礼物
    def giftt(self, uid, recvUid, giftId):
        """
        送礼接口
        :param uid: 送礼用户
        :param recvUid: 收礼用户
        :param giftId: 礼物道具id
        :return: 
        """
        VoiceRoom().send_gift_room_one(uid, recvUid, giftId)

    def giftt_a(self, uid, recvUid, giftId):
        # 与上面的接口相同 不多做叙述
        # 没什么区别 就是写着好理解俩接口的概念
        VoiceRoom().send_gift_room_one(recvUid, uid, giftId)

if __name__ == '__main__':
    # 因为我的账号是储存在yaml文件内 所以需要先倒出需要用户的uid列表
    # 送礼人与收礼人分别倒出
    uid_list = YamlHandler(YamlThePath().voice_room_cpNew).get_uid_list(10)
    rUid_list = YamlHandler(YamlThePath().number_old).get_scope_uid(1500, 10)
    # 这里暂时先展示最简单的AB同时互送~
    for (i, j) in zip(uid_list, rUid_list):
        # target内需要传入方法名 不要带()因为带括号就等于去调用了该方法 会直接开始执行
        # args内传入输入带入的参数 可以按顺序来 也可以整理成元组或字典接收
        t1 = threading.Thread(target=BrushGifts().giftt, args=(i, j, 51620))
        # 两个threading.Thread就是我请求并发两个接口
        t2 = threading.Thread(target=BrushGifts().giftt, args=(j, i, 51620))
        # t1.start()为执行
        t1.start()
        t2.start()

主线程:

主线程的概念就是这个py文件内从头到位的执行 当我执行完最后一行代码t2.start()后 主线程会进入等待状态,等待子线程结束后主线程才会结束

子线程:

子线程的概念就是在主线程执行的过程中我执行到了这里 当然这里是通过t1.start()方法来进行调用的

t1 = threading.Thread(target=BrushGifts().giftt, args=(i, j, 51620))

这时候系统会再开辟出一条子线程进行BrushGifts().giftt方法的执行与调用

主线程在进行的时候会执行t1.start()与t2.start()但是他不会等待他们执行结束,主线程会继续往下,所以t1.start()与t2.start()是同时请求,当t1.start()与t2.start()两个子进程都结束时,主线程才会结束~

因为主线程执行t1.start()与t2.start()是一行一行的执行 而且python无法做到准确意义上的并发 所以如果对数据速度要求很高的时候 此方法不适用

如何用python请求接口

作用:用来重复插入数据

1、首先下载好python 然后 cmd 输入 python 判断是否全局安装成功

2、下载好PcIdea

3、下载好自己需要的库

4、查看请求网络

  • 按好F12
  • 对接口进行请求
  • 先将需要的header请求头标数据进行验证

  • 查看正文请求

5、给你一个模板自己慢慢体会

import requests                         #导入requests包
import random
import json
import time

# response = requests.get('http://www.baidu.com')
# print(response.status_code)  # 打印状态码
# print(response.url)          # 打印请求url
# print(response.headers)      # 打印头信息
# print(response.cookies)      # 打印cookie信息
# print(response.text)  #以文本形式打印网页源码
# print(response.content) #以字节流形式打印
# print(response.json())

AddCarURL = "http://localhost:10086/jeecg-boot/cable/insurance/add"
AddCarCookies = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjkwOTUyNzcsInVzZXJuYW1lIjoiYWRtaW4ifQ.Kn1jB5gUkCdnszSVxnjVVKtRMbx_WJSVZW6G-yJaid8"
randomStr = "ABCDEFGHIJKLMNOPQRST"
randomInsurance = ["泰康人寿","阳光保险","新华保险","太平人寿","同方全球人寿","友邦保险"," 招商仁和","平安保险"]
randomBox = ["石鲜仓储","明顺仓储","雄星仓储","金盛仓储","旺恒仓储","中豹仓储","飞翔仓储","速发仓储","春天仓储"]
sess = requests.session()
headers = {
    "X-Access-Token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MjkxMDUyMjUsInVzZXJuYW1lIjoiYWRtaW4ifQ.EUAjJYACel8QHFw4AFERIaDjXZJTwOOyp8uncqx3Jps",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19041",
    "Referer":"http://localhost:3000/cable/VehicleList",
    "Origin":"http://localhost:3000",
    "Host":"localhost:10086",
    "Content-Type":"application/json; charset=utf-8"
}

a1=(2017,1,1,0,0,0,0,0,0)              #设置开始日期时间元组(1976-01-01 00:00:00)
a2=(2019,3,16,23,59,59,0,0,0)    #设置结束日期时间元组(1990-12-31 23:59:59)

a3=(2019,3,16,0,0,0,0,0,0)              #设置开始日期时间元组(1976-01-01 00:00:00)
a4=(2021,8,16,23,59,59,0,0,0)    #设置结束日期时间元组(1990-12-31 23:59:59)

start=time.mktime(a1)    #生成开始时间戳
end=time.mktime(a2)      #生成结束时间戳

start1=time.mktime(a3)    #生成开始时间戳
end2=time.mktime(a4)      #生成结束时间戳

# for i in range(10):
#     t=random.randint(start,end)    #在开始和结束时间戳中随机取出一个
#     date_touple=time.localtime(t)          #将时间戳生成时间元组
#     date=time.strftime("%Y-%m-%d",date_touple)  #将时间元组转成格式化字符串(1976-05-21)
#
#     t1 = random.randint(start1,end2)
#     date_touplen=time.localtime(t1)          #将时间戳生成时间元组
#     dateOne=time.strftime("%Y-%m-%d",date_touplen)  #将时间元组转成格式化字符串(1976-05-21)
#     print(date + " " +dateOne)

def addCar(num:int):
    # {"type": "2", "carryingCapacity": "3吨", "license": "粤A888", "engineNumber": "123456", "state": 0}

    # {"vehicleId": "2", "insuraName": "人寿保险", "insurancePolicy": "UY1254SD5492W", "insuranceDateBegin": "2021-08-16",
    #  "insuranceDateEnd": "2021-08-31", "strongPolicy": "UY1254SD5492E", "strongDateBegin": "2021-07-01",
    #  "strongDateEnd": "2021-08-28", "license": "2"}
    for i in range(num):

        t = random.randint(start, end)  # 在开始和结束时间戳中随机取出一个
        date_touple = time.localtime(t)  # 将时间戳生成时间元组
        date = time.strftime("%Y-%m-%d", date_touple)  # 将时间元组转成格式化字符串(1976-05-21)

        t1 = random.randint(start1, end2)
        date_touplen = time.localtime(t1)  # 将时间戳生成时间元组
        dateOne = time.strftime("%Y-%m-%d", date_touplen)  # 将时间元组转成格式化字符串(1976-05-21)

        datas = {}
        datas["vehicleId"] = "2"
        datas["insuraName"] = random.choice(randomInsurance)
        datas["insurancePolicy"] = random.choice(randomStr) + str(random.randint(10000, 99999)) + random.choice(randomStr) + str(random.randint(10000, 99999));
        datas["insuranceDateBegin"] = date
        datas["insuranceDateEnd"] = dateOne
        datas["strongPolicy"] = random.choice(randomStr) + str(random.randint(10000, 99999)) + random.choice(randomStr) + str(random.randint(10000, 99999));
        datas["strongDateBegin"] = date
        datas["strongDateEnd"] = dateOne
        datas["license"] = i

        print(datas)
        res=requests.post(url=AddCarURL, data=json.dumps(datas), headers=headers)
        print(res.text)

addCar(100)

记得要通过 token 验证,还有根据数据转json 即可

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python线程池ThreadPoolExecutor,传单个参数和多个参数方式

    目录 python线程池ThreadPoolExecutor,传单个参数和多个参数 这是线程池传单个参数的 下面是传多个参数的 python线程池传入多个参数 ThreadPoolExecutor.submit 多参数支持 总结 python线程池ThreadPoolExecutor,传单个参数和多个参数 这是线程池传单个参数的 from concurrent.futures import ThreadPoolExecutor,as_completed def test(a):        

  • 浅析Python中的多进程与多线程的使用

    在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为"GIL")指指点点,说它阻碍了Python的多线程程序同时运行.因此,如果你是从其他语言(比如C++或Java)转过来的话,Python线程模块并不会像你想象的那样去运行.必须要说明的是,我们还是可以用Python写出能并发或并行的代码,并且能带来性能的显著提升,只要你能顾及到一些事情.如果你还没看过的话,我建议你看看Eqbal Quran的文章

  • python3多线程知识点总结

    多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. 每个独立的线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在应用程序中,由应用程序提

  • C#发送Get、Post请求(带参数)

    目录 Get请求 Post请求 Get请求 1.简单发送Get请求 /// <summary> /// 指定Url地址使用Get 方式获取全部字符串 /// </summary> /// <param name="url">请求链接地址</param> /// <returns></returns> public static string Get(string url) { string result = &qu

  • python如何定义带参数的装饰器

    本文实例为大家分享了python定义带参数装饰器的具体代码,供大家参考,具体内容如下 案例: 实现一个装饰器,用它来检查被装饰函数的参数类型. 需求: 装饰器可以通过函数,指明函数参数类型,进行函数调用的时候,传入参数,检测到不匹配时,抛出异常 如何解决这个问题? 先要获取函数的签名,并且获得装饰器中参数,然后把函数签名和装饰器中参数对应绑定 把调用函数时候传入的参数和函数签名进行绑定 把实参和装饰器中定义的数据进行类型比较,不匹配抛出异常 #!/usr/bin/python3 from ins

  • ASP 调用带参数输出的COM接口

    COM接口VC实现,接口: [id(1), helpstring("method Test")] HRESULT Test([in] BSTR strInputA, [in] BSTR strInputB, [out,retval] VARIANT* result); ASP调用: Set objCompInfo =server.CreateObject("组件在系统中的名字") result=objCompInfo.Test(arrIn,arrout) "

  • 使用python将请求的requests headers参数格式化方法

    如下所示: import json # 使用三引号将浏览器复制出来的requests headers参数赋值给一个变量 headers = """ Host: zhan.qq.com Proxy-Connection: keep-alive Content-Length: 799432 Pragma: no-cache Cache-Control: no-cache Origin: http://zhan.qq.com User-Agent: Mozilla/5.0 (Win

  • Ajax轮询请求状态(微信公众号带参数二维码登录网站)

    这里要实现的功能是:通过扫码微信公众号带参数的二维码,来登录网站. 但很明显,如果ajax不间断的请求服务器,这样会加重服务器的负荷,所以本例采用的是js的setInterval来周期性调用执行一个ajax函数来来向服务器请求数据,但请求成功或者请求一定次数后还未成功时用clearinterval函数清空计时器. 代码和注释如下:(后端采用thinkPHP实现,所以js代码中含有一些thinkPHP的语法规则) <script type="text/javascript" src

  • Python实现带参数与不带参数的多重继承示例

    本文实例讲述了Python实现带参数与不带参数的多重继承.分享给大家供大家参考,具体如下: 1. 不带参数的多重继承 # 作者:hhh5460 # 时间:2017.07.18 class A(object): def show_x(self): print('A') class B(object): def show_y(self): print('B') class C(object): def show_z(self): print('C') class D(A, B, C): pass #

  • python 多线程对post请求服务器测试并发的方法

    如下所示: # -*- coding: utf-8 -*- import requests import threading import time class postrequests(): def __init__(self): self.url = '请求网址' self.files = { 'unknown_image':open('刘诗诗.jpg','rb') } def post(self): try: r = requests.post(self.url,files=self.fi

  • Python封装成可带参数的EXE安装包实例

    最近有一个小项目,有如下的需求: 将某几个源码文件夹进行打包,文件夹内有py文件.dll文件.exe文件等各种文件类型 打包生成的安装包,在进行安装的时候,应该能够带有参数,对配置文件进行修改配置 安装过程中,可以配置系统环境变量 能够检测环境,提示安装依赖包 整个过程要可以自动化,能够大量部署 综合考虑后,决定以下几个步骤完成: 用setup.py将源码文件夹都打包成msi安装包,这样可以使用msiexec进行静默安装 setup.py可以提示用户安装依赖包,否则安装失败 再编写一个py文件,

  • python函数装饰器之带参数的函数和带参数的装饰器用法示例

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(func): def wrap(*args, **kwargs): start_time = time.time() res = func(*args, **kwargs) end_time = time.time() print('运行时间为', end_time-start_time) return

  • Python实现带参数的用户验证功能装饰器示例

    本文实例讲述了Python实现带参数的用户验证功能装饰器.分享给大家供大家参考,具体如下: user_list = [ {'name': 'sb1', 'passwd': '123'}, {'name': 'sb2', 'passwd': '123'}, {'name': 'sb3', 'passwd': '123'}, {'name': 'sb4', 'passwd': '123'} ] # 初始状态,用来保存登陆的用户, client_dic = {'username': None, 'lo

随机推荐