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

本文同步我的技术文档

相关文章
|
17天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
9天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
40 8
|
9天前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
29 7
|
9天前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
33 4
|
9天前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
26 5
|
17天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
41 10
|
26天前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
2月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
58 1
C++ 多线程之初识多线程
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
27 3
|
2月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
24 2