【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到后端的。个人自定义即可

本文同步我的技术文档

相关文章
|
10天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
1月前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
105 61
Python装饰器实战:打造高效性能计时工具
|
27天前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
103 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
21天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
193 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
2天前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
27天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
54 20
|
2月前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
78 33
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
4天前
|
Python
python3多线程中使用线程睡眠
本文详细介绍了Python3多线程编程中使用线程睡眠的基本方法和应用场景。通过 `time.sleep()`函数,可以使线程暂停执行一段指定的时间,从而控制线程的执行节奏。通过实际示例演示了如何在多线程中使用线程睡眠来实现计数器和下载器功能。希望本文能帮助您更好地理解和应用Python多线程编程,提高程序的并发能力和执行效率。
32 20
|
10天前
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。