多线程概述
我们首先简单回顾一下多线程(我前面有文章讲过)
多线程是指在一个程序中同时执行多个部分或多个任务,这些部分或任务可以并发地执行,提高程序的效率和性能。Python提供了threading
模块来实现多线程编程。
代码解析
在开篇部分,我们简要介绍了多线程的概念和优势。多线程是一种并发执行的方式,可以同时执行多个任务,提高程序的效率和性能。它通过充分利用计算机的多核处理器,在同一个程序中独立运行多个线程,从而实现任务的并发执行。
在我的项目里,我们将拆分几个代码片段来详解。这次我们用例是多线程的查询请求,然后多线程的POST给后端。
先看运行结果
在代码里我们先创建一个数组,或者是请求能提取到数据的接口。
#数据示例
list = ['baicu.com','qq.com']
在代码里我选择了使用接口返回的数据处理成数组。
url = f"https://xxx.com?data={query_data}&page={current_page}"
response = requests.post(url)
domains = []
time.sleep(1.5)
try:
if response.status_code == 200:
json_data = response.json()
if "site" in json_data and len(json_data["list"]) > 0:
for item in json_data["list"]:
domain = item["domain"]
domains.append(domain)
print("步骤1:", domains)
if retries == max_retries:
print(f"第 {current_page} 页获取失败")
except Exception as e:
print("报错!", e)
在上述代码里,我我请求了一个接口返回的数据,我将每一组数据里面的domain
提取出来,然后储存到我定义的domains数组里,使用 append
方法。
多线程执行
因为我们每个数组里面有不固定的数量,所以写死线程数是不现实的。即使自定义,也会发生误差造成资源浪费。所以我们直接使用for循环来创建、关闭多线程
。
threads = [] # 存储所有线程
for domain in domains:
# 创建线程
thread = threading.Thread(target=query_whois, args=(random.choice(whois_url), domain))
# 启动线程
thread.start()
threads.append(thread)
# 等待线程完成
for thread in threads:
thread.join()
这个时候我调用了query_whois
方法。没错,这个就是我用来查询域名whois信息的方法,同时在方法里面调用post方法传递到后端。整个流程就完成了!
def query_whois(url, domain):
response = requests.get(url.format(domain))
data = json.loads(response.text)
# print(data)
if data["code"] == 200 and len(data) > 3: # 使用相对等于判断
whois_data = {
"email": data.get("email", ""),
"domain_reg_date": data.get("reg_date", ""),
"LLC": data.get("LLC", ""),
}
set_domian(whois_data, domain)
else:
print("Whois 查询错误:code", data["code"], domain)
set_domian
方法就是你写post到后端的。个人自定义即可