如何在Python中将同步转换为异步

时间:2019-09-24 13:31:19

标签: python python-3.x asynchronous

我的代码可以很好地获取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”。 该请求发送成功,但我认为参数未随请求一起发送。

哪里出问题了? 我需要解决方案(答案)来解决此问题。

2 个答案:

答案 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的数据。

相关问题