Maison > développement back-end > Tutoriel Python > Comment résoudre le problème du multi-thread Python demandant plusieurs interfaces avec des paramètres

Comment résoudre le problème du multi-thread Python demandant plusieurs interfaces avec des paramètres

WBOY
Libérer: 2023-04-24 15:10:15
avant
1670 Les gens l'ont consulté

Plusieurs threads demandent plusieurs interfaces avec des paramètres

Pour le contenu processus/thread/Ctrip/asynchrone, j'ai le temps de le préparer et de l'écrire. J'utilise la boucle for tout le temps. C'est si lent que je doute qu'il y en ait. de nombreux scénarios qui doivent être utilisés dans la vie, je vais donc les séparer un peu. Pour résumer

Jetons d'abord un coup d'œil au code de l'interface de requête multithread

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()
Copier après la connexion

Thème principal :

Le concept de. le thread principal doit exécuter le fichier py à partir de zéro. Lorsque j'ai fini d'exécuter la dernière ligne de code t2.start(), le thread principal entrera alors dans l'état d'attente et le thread principal se terminera après avoir attendu que le sous-thread se termine. end

Sous-thread :

Le concept de sous-thread est que lors de l'exécution du thread principal, je l'ai exécuté ici. Bien sûr, c'est via la méthode t1.start () pour effectuer l'appel

t1 = threading.Thread(target=BrushGifts().giftt, args=(i, j, 51620))
Copier après la connexion
.

À ce moment-là, le système ouvrira un sous-thread pour exécuter et appeler la méthode BrushGifts().giftt

Le thread principal exécutera t1.start() et t2.start pendant qu'il est en cours () Mais. il n'attendra pas la fin de leur exécution. Le thread principal continuera, donc t1.start() et t2.start() sont demandés en même temps lorsque t1.start() et t2.start() sont tous deux enfants. processus Lorsqu'il se terminera, le thread principal se terminera ~

Parce que le thread principal exécute t1.start() et t2.start() ligne par ligne et que Python ne peut pas atteindre la concurrence dans le sens exact du terme, donc si la vitesse des données est très élevée , Parfois, cette méthode n'est pas applicable

Comment utiliser python pour demander l'interface

Fonction : utilisée pour insérer des données à plusieurs reprises

1 Téléchargez d'abord python, puis entrez python dans cmd pour déterminer si l'installation globale a réussi

2. . Télécharger PCIDEA

3.

Comment résoudre le problème du multi-thread Python demandant plusieurs interfaces avec des paramètres

  • Afficher la demande de texte

  • 5. Donnez-vous un modèle et expérimentez-le lentement

     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)
    Copier après la connexion
    N'oubliez pas de réussir la vérification du jeton et de convertir les données en json.
  • Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal