我的代码可以很好地获取n到q范围内的数据,但是当我想使用大范围(1-100000)时它太慢了。我的代码需要3-4秒才能完成每个发布请求。所以我想按照我的代码来加快速度:
"isosceles" | "scalene"
上面的代码需要> 150秒的时间来执行所有50个请求。
那是为什么?我尝试使其变为异步,现在发送50个请求的总时间为<2sec:
import requests
from tqdm import tqdm
url = "https://www.example.com/info/item"
headers = {
'Content-Type': "application/x-www-form-urlencoded",
'Access-Control-Allow-Origin': "*",
'Accept-Encoding': "gzip, deflate",
'Accept-Language': "en-US",
}
n = 1
q = 50
sum = 0
for i in tqdm(range(n,q)):
payload = "item_id={}".format(i+1)
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
sum = sum + i
但是!我被困... 输出显示无效的“ item_id”。 该请求发送成功,但我认为参数未随请求一起发送。
哪里出问题了? 我需要解决方案(答案)来解决此问题。
答案 0 :(得分:-1)
我发现了上述异步代码的有效修复程序,并且效果很好:
BinarySearchTree {
root:
{ data: 16,
left: { data: 8, left: [Object], right: null },
right: { data: 17, left: null, right: [Object] } } }
答案 1 :(得分:-2)
正如他们之前在评论中告诉您的,实现所需目标的最佳方法是创建不同的线程,而不是使其异步。
import requests
from tqdm import tqdm
import threading
url = "https://www.example.com/info/item"
headers = {
'Content-Type': "application/x-www-form-urlencoded",
'Access-Control-Allow-Origin': "*",
'Accept-Encoding': "gzip, deflate",
'Accept-Language': "en-US",
}
n = 1
q = 50
sum = 0
def ThreadPOST(payload, headers):
response = request.request("POST", url, data=payload, headers=headers)
print(response.text)
for i in tqdm(range(n,q)):
payload = "item_id={}".format(i+1)
threading.Thread(target=ThreadPOST, args=(payload, headers)).start()
sum = sum + i
这将产生50个线程,每个线程将上传其自己的ID的数据。