首頁 > 軟體

python多執行緒請求帶引數的多個介面問題

2023-03-15 06:01:32

多執行緒請求帶引數的多個介面

對於程序/執行緒/攜程/非同步的內容 有時間準備寫寫了 真的一直用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 即可

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com