【发布时间】:2018-09-18 23:53:27
【问题描述】:
我正在尝试测试一个公开可用的网页,该网页接受 GET 请求并根据 GET 参数返回不同的 JSON 文件。
API 看起来像
https://www.example.com/api/page?type=check&code=[Insert string here]
我编写了一个程序来检查此 API 上所有可能的 4 字母字符串的结果。我的代码看起来像这样(替换了实际的 URL):
import time, urllib.request
for a in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
for b in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
for c in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
for d in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
a,b,c,d = "J","A","K","E"
test = urllib.request.urlopen("https://www.example.com/api/page?type=check&code=" + a + b + c + d).read()
if test != b'{"result":null}':
print(a + b + c + d)
f = open("codes", "a")
f.write(a + b + c + d + ",")
f.close()
此代码功能齐全,可以按预期工作。但是,有一个问题。因为程序在收到响应之前无法继续,所以这种方法非常慢。如果这个 API 的 ping 时间是 100 毫秒,那么每次检查需要 100 毫秒。当我修改这段代码以便它可以在一个实例中测试一半的结果,在另一个实例中测试一半时,我注意到速度翻了一番。
因此,我相信网站的 ping 时间是此脚本的限制因素。我想要做的是能够基本上检查每个代码,然后立即检查下一个而不等待响应。
这相当于在我的浏览器中打开页面几千次。它可以同时加载许多选项卡,因为每个页面都小于一千字节。
我研究过使用线程来执行此操作,但我不确定它是否相关或有用。
【问题讨论】:
标签: python python-3.x multithreading urllib python-3.7