【发布时间】:2019-12-01 19:57:12
【问题描述】:
如下所示的 Python 新手是我的第一次尝试。我拥有的是一个列出客户工作编号的 csv 文件。我正在对我们的(第三方)工作管理系统进行 3 次 api 调用。 1 获取实际作业编号,2 获取作业阶段,3 获取作业状态(如下)。我有一个 vb.net 应用程序,可以将这些结果全部分开,将它们与其他数据混合,并将它们添加到 MYSQL 数据中,以便在 Ruby 仪表板上进行报告等。Grunt 与 API 调用的工作是在 excel vba 中完成的,因为我可以做到这一切都在一个地方。 API 调用很慢,非常慢,所以我想办法加快速度,然后 Python 出现了。排序下面以及从.net调用它,但它仍然很慢。这三个电话总共需要大约 5 分钟。我们只查看大约 60 到 70 个工作编号。第一次调用工作编号确实会带来一个大的 json 文件,但不幸的是不是我在第二次和第三次调用中需要的数据,所以我无法通过消除 2 和 3 来加速它。
由于我刚开始接触 Python,我无法轻易找到解决方案。我一直在看多线程、多处理的帖子,但都是有半点线索的人问的,我还没有。
非常感谢任何帮助。
import requests
import csv
with open("C:\\******.csv") as csvfile:
readCSV = csv.reader(csvfile, delimiter=",")
jobs = []
Stages = []
outfile = open("C:\\*********another****.csv", "w")
for row in readCSV:
job = row[0]
url = (
"https:/********.com/api/v1.0/companies/**/jobs/"
+ job
+ "?columns=Status"
)
auth_token = "*******"
payload = ""
headers = {
"Content-Type": "application/json x-www-form-urlencoded",
"Authorization": "Bearer *********",
"Accept": "*/*",
"Cache-Control": "no-cache",
"Host": "*****",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
"cache-control": "no-cache",
}
response = requests.request(
"GET", url, data=payload, headers=headers
)
Stage = response.text
print((job, Stage), file=outfile)
outfile.close
【问题讨论】:
-
您的代码仅显示发出一个
GET请求。所有 3 个请求都需要按顺序发生吗?顺便说一句,您正在寻找多线程而不是多处理,因为这是一个 I/O 绑定任务 -
@aws_apprentice 代码对每个从 CSV 文件读取的
job执行一个 GET 请求,因此发生的请求与 CSV 文件中的行数一样多。 -
这三个中的每一个都非常相似,并且 Status 和 Stage 调用是相同的。对工作编号的第一次调用被拉开以获取第二次和第三次调用的数据。 1 和 2 以及 2 和 3 之间存在延迟,因此可以对生成的文件进行其他处理。这实际上只是每个单独请求所需的时间,这是我第一次尝试,因此我希望能够针对其他两个请求提供一些建议和指导。
标签: python multithreading python-requests