列表中的Python EST API多线程

时间:2017-06-22 20:48:33

标签: python json multithreading api

我有一个我需要发送到API的~380条记录的Python列表,但它单独执行它的速度很慢。我目前可以使用这个:

payload_length = len(payload)
for i in range(0, payload_length):
    send_contacts(payload[i])

发送单个联系人,但想知道我是否可以启动x个线程。我读到了异步请求和问候,但我无法理解代码。

我很感激任何指示。

1 个答案:

答案 0 :(得分:0)

我希望这可以帮助某人从请求转移到问候,因为这比我应该花的时间更长:

原始要求:

print ("Sending stuff requests...")
r =  requests.post(url='https://rest.api.com/v1/lists/12345/contacts', data=json_payload, headers={'Content-Type': 'application/json','Authorization' : 'Basic '+ api_string}, timeout=5)
print(json.loads(r.text))

我想到的是我可以手动输入URL并在我的“for u in urls”中我实际上得到了一个json有效负载的列表,这些有效负载一次性被触发而不是多个URL。我确定这仍然是超级糟糕的代码,但这是对我的问题的一个快速和黑客的修复:

print ("Sending stuff grequests...")
rs = (grequests.post('https://rest.api.com/v1/lists/12345/contacts', data=u[1], headers={'Content-Type':'application/json', 'Authorization' : 'Basic '+ api_string}) for u in urls)
responses = grequests.map(rs)
for response in responses:
    print(json.loads(response.text))