【Python】第一个多线程项目的简单实战教程

简介: 在Python中进行多线程编程是一种有效的方式来提高程序的性能和并发性。本项目旨在帮助您开始进行多线程编程,并提供一个简单的实战示例。在这个项目中,您将学习如何使用Python的threading模块创建和管理多个线程。通过将任务分配给不同的线程,可以同时执行多个任务,从而加快程序的执行速度。

多线程概述

我们首先简单回顾一下多线程(我前面有文章讲过)
多线程是指在一个程序中同时执行多个部分或多个任务,这些部分或任务可以并发地执行,提高程序的效率和性能。Python提供了threading模块来实现多线程编程。

代码解析

在开篇部分,我们简要介绍了多线程的概念和优势。多线程是一种并发执行的方式,可以同时执行多个任务,提高程序的效率和性能。它通过充分利用计算机的多核处理器,在同一个程序中独立运行多个线程,从而实现任务的并发执行。

在我的项目里,我们将拆分几个代码片段来详解。这次我们用例是多线程的查询请求,然后多线程的POST给后端。

先看运行结果
微信截图_20230710103926.png

在代码里我们先创建一个数组,或者是请求能提取到数据的接口。

#数据示例
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到后端的。个人自定义即可

本文同步我的技术文档

相关文章
|
1天前
|
Python
【python】在pycharm创建一个新的项目
【python】在pycharm创建一个新的项目
4 0
|
1天前
|
机器学习/深度学习 算法 Python
深入浅出Python机器学习:从零开始的SVM教程/厾罗
深入浅出Python机器学习:从零开始的SVM教程/厾罗
|
2天前
|
算法 机器人 Python
Python实现教程:平面最短路径算法
Python实现教程:平面最短路径算法
10 1
|
2天前
|
机器学习/深度学习 数据采集 数据可视化
Python众筹项目结果预测:优化后的随机森林分类器可视化|数据代码分享
Python众筹项目结果预测:优化后的随机森林分类器可视化|数据代码分享
|
2天前
|
Java
Java中的多线程编程:基础知识与实战技巧
【5月更文挑战第6天】多线程编程是Java中的一个重要特性,它允许我们在一个程序中同时执行多个任务。本文将介绍Java多线程的基础知识,包括线程的创建、启动、同步和通信,以及如何在Java中实现多线程编程。通过实例代码和解析,帮助读者深入理解Java多线程编程的概念和应用。
|
8天前
|
机器学习/深度学习 数据采集 TensorFlow
【Python机器学习专栏】使用Python进行图像分类的实战案例
【4月更文挑战第30天】本文介绍了使用Python和深度学习库TensorFlow、Keras进行图像分类的实战案例。通过CIFAR-10数据集,展示如何构建和训练一个卷积神经网络(CNN)模型,实现对10个类别图像的识别。首先安装必要库,然后加载数据集并显示图像。接着,建立基本CNN模型,编译并训练模型,最后评估其在测试集上的准确性。此案例为初学者提供了图像分类的入门教程,为进一步学习和优化打下基础。
|
8天前
|
机器学习/深度学习 算法 UED
【Python 机器学习专栏】A/B 测试在机器学习项目中的应用
【4月更文挑战第30天】A/B测试在数据驱动的机器学习项目中扮演关键角色,用于评估模型性能、算法改进和特征选择。通过定义目标、划分群组、实施处理、收集数据和分析结果,A/B测试能帮助优化模型和用户体验。Python提供工具如pandas和scipy.stats支持实验实施与分析。注意样本量、随机性、时间因素和多变量分析,确保测试有效性。A/B测试助力于持续改进机器学习项目,实现更好的成果。
|
8天前
|
设计模式 算法 安全
Java多线程编程实战:从入门到精通
【4月更文挑战第30天】本文介绍了Java多线程编程的基础,包括线程概念、创建线程(继承`Thread`或实现`Runnable`)、线程生命周期。还讨论了线程同步与锁(同步代码块、`ReentrantLock`)、线程间通信(等待/通知、并发集合)以及实战技巧,如使用线程池、线程安全设计模式和避免死锁。性能优化方面,建议减少锁粒度和使用非阻塞算法。理解这些概念和技术对于编写高效、可靠的多线程程序至关重要。
|
9天前
|
Linux Python Windows
Python更换国内pip源详细教程
Python更换国内pip源详细教程
|
9天前
|
并行计算 安全 测试技术
Python多线程
【4月更文挑战第13天】对比多线程与多进程:多线程适合I/O密集型任务,轻量级但受GIL限制;多进程适用于CPU密集型任务,能实现真正并行。多线程直接共享内存,多进程独立内存,各有优劣。
8 0