【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编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2天前
|
测试技术 数据库 Python
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
71 61
Python装饰器实战:打造高效性能计时工具
|
19天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
58 33
|
26天前
|
并行计算 算法 安全
面试必问的多线程优化技巧与实战
多线程编程是现代软件开发中不可或缺的一部分,特别是在处理高并发场景和优化程序性能时。作为Java开发者,掌握多线程优化技巧不仅能够提升程序的执行效率,还能在面试中脱颖而出。本文将从多线程基础、线程与进程的区别、多线程的优势出发,深入探讨如何避免死锁与竞态条件、线程间的通信机制、线程池的使用优势、线程优化算法与数据结构的选择,以及硬件加速技术。通过多个Java示例,我们将揭示这些技术的底层原理与实现方法。
79 3
|
1月前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
55 10
|
19天前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
2月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
安全 Java Python
sonarqube扫描Python项目代码
sonarqube扫描Python项目代码
sonarqube扫描Python项目代码
|
7月前
|
算法 程序员 开发工具
GitHub上新!14个Python项目详细教程(附完整代码)
Python作为程序员的宠儿,越来越得到人们的关注,使用Python进行应用程序开发的也越来越多。 今天给小伙伴们分享的这份项目教程完整代码已上传至GitHub,你可以选择跟着这份教程一段一段的手敲出来这几个项目,也可以直接从GitHub上copy下来。
|
8月前
|
机器学习/深度学习 数据采集 数据可视化
Python众筹项目结果预测:优化后的随机森林分类器可视化|数据代码分享
Python众筹项目结果预测:优化后的随机森林分类器可视化|数据代码分享