python实现多线程采集的2个代码例子

下面是详细的攻略:

Python实现多线程采集

前言

对于一些需要收集数据的任务,并发的采集方式无疑是对效率的一大提升。Python语言提供了多线程编程的支持,本文将会介绍两种使用Python实现多线程采集的方式并提供相应的代码。

代码实现

代码一

第一种实现方式相对来说比较简单理解,我们可以直接使用Thread类来创建新的线程并运行。

import threading
import requests

def main():
    urls = ["http://example.com/", 
            "http://example.com/news", 
            "http://example.com/about", 
            "http://example.com/contact",
            "http://example.com/sitemap",
            "http://example.com/blog",
            "http://example.com/jobs",
            "http://example.com/feedback"]

    threads = []

    for url in urls:
        t = threading.Thread(target=fetch_url, args=(url,))
        threads.append(t)
        t.start()

    for t in threads:
        t.join()

def fetch_url(url):
    print("Fetching {0}".format(url))
    try:
        r = requests.get(url)
        print("{0}: {1}".format(url, r.status_code))
    except requests.exceptions.RequestException as e:
        print("{0}: {1}".format(url, e))

使用上述代码,简单来说,我们首先定义了一个列表urls,并在遍历该列表的过程中,创建了多个线程,每个线程都调用了fetch_url函数,并传入了当前的URL。接着,我们在主线程内通过join等待其他线程的结束。

代码二

另外一种实现方式相对来说更加高级,可以同时限制线程数量来进一步提升效率,我们可以使用Python的线程池来实现。

import concurrent.futures
import requests

def main():
    urls = ["http://example.com/", 
            "http://example.com/news", 
            "http://example.com/about", 
            "http://example.com/contact",
            "http://example.com/sitemap",
            "http://example.com/blog",
            "http://example.com/jobs",
            "http://example.com/feedback"]

    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        future_to_url = {executor.submit(fetch_url, url): url for url in urls}
        for future in concurrent.futures.as_completed(future_to_url):
            url = future_to_url[future]
            try:
                data = future.result()
                print("{0}: {1}".format(url, data))
            except Exception as exc:
                print("{0}: {1}".format(url, exc))

def fetch_url(url):
    print("Fetching {0}".format(url))
    try:
        r = requests.get(url)
        return r.status_code
    except requests.exceptions.RequestException as e:
        return str(e)

使用以上代码,我们可以看到,在主函数内,我们首先定义了一个URL列表urls,并使用线程池ThreadPoolExecutor创建了一个最大线程数为5的线程池。随后,我们在使用submit方法向线程池提交任务时,还为每个任务使用了一个dict来存储其对应的URL地址,方便我们后续的输出。最后,我们在对future进行as_completed迭代的过程中获取了每个任务返回的结果。

总结

以上两种多线程采集Python代码的方式并不是唯一的选择,而是较为常用且简便的方式之一。通过合理使用多线程的方式来提升程序的效率,是Python程序员们需要重点考虑的一项工作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现多线程采集的2个代码例子 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python 多线程threading程序详情

    下面是关于“Python 多线程 threading 程序详情”的完整攻略。 概述 多线程是指在同一时间可以运行多个线程,这样可以使程序的执行更加高效。在 Python 中,多线程通过 threading 模块来实现。threading 模块中的 Thread 类可以创建一个线程对象。 创建线程对象 使用 Thread 类创建线程对象时,需要实现一个 run…

    python 2023年5月18日
    00
  • 区分python中的进程与线程

    区分Python中的进程与线程 在Python中,进程(process)和线程(thread)是常见的多任务处理方式。在深入理解它们的区别之前,我们需要先了解一些基础知识。 1. 什么是进程和线程? 进程:操作系统中的一个概念,是正在运行的程序实例。进程有自己的内存空间和系统资源,可以独立运行。 线程:进程中执行的“任务”或“工作单元”,是程序执行的最小单位…

    python 2023年5月19日
    00
  • python爬取全国水雨情信息详解

    Python爬取全国水雨情信息攻略 全国水雨情信息是我们日常生活中非常重要的信息之一,使用Python可以方便地爬取全国水雨情信息。本攻略将介绍使用Python爬取全国水雨情信息的示例代码,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取全国水雨情信息。以下是获取全国水雨情信息的示例: impo…

    python 2023年5月15日
    00
  • python实现学生通讯录管理系统

    Python实现学生通讯录管理系统 本文将介绍如何使用Python语言实现学生通讯录管理系统。这个系统可以实现添加、删除、修改和查询学生信息等功能。 数据库 我们首先需要一个数据库来存储学生信息。我们可以选择使用sqlite3来创建一个本地的数据库。 import sqlite3 # 连接到本地数据库 conn = sqlite3.connect(‘stud…

    python 2023年5月30日
    00
  • 使用Python绘制三种概率曲线详解

    使用Python绘制概率曲线是数据分析和数据可视化的常见操作之一。通过绘制概率曲线,我们可以直观地了解某个事件在不同概率值下的分布情况。本文将详细讲解如何使用Python绘制三种常见的概率曲线:正态分布曲线、t分布曲线和F分布曲线。 正态分布曲线 正态分布曲线(也叫高斯分布曲线)是一种连续概率分布,常用于描述自然现象中的随机变量。其密度函数为: $$f(x)…

    python 2023年6月3日
    00
  • python多行字符串拼接使用小括号的方法

    使用小括号的方法是python中常用的多行字符串拼接方式,使用该方法可以使代码更加美观、易读。下面是详细的攻略: 1. 什么是多行字符串? 多行字符串指的是一个字符串占据多行,通常在长文本、说明文档等场景下被使用。 在python中,多行字符串可以使用三引号(”’ 或 “””)来创建。 示例代码: long_text = ”’ 这是一个非常长的字符串, …

    python 2023年6月5日
    00
  • Python操作word文档的示例详解

    让我来给你讲一下“Python操作word文档的示例详解”的完整攻略。 一、准备工作 1.安装必要的库 在Python中,操作Word文档需要使用到python-docx库。所以,首先需要安装该库,可以使用如下命令: pip install python-docx 2.打开Word文档 在准备操作Word文档之前,需要先打开Word文档。假设我们要打开的文档…

    python 2023年6月3日
    00
  • Python爬虫抓取论坛关键字过程解析

    Python爬虫抓取论坛关键字过程解析 简介 爬虫是指在互联网上模拟人的行为,自动化获取网页信息的程序。Python是一门著名的编程语言,具有易学易用的特点,同时也具备着强大的爬虫库和生态系统,使其成为了数据挖掘领域中的主要语言之一。本文将详细讲解如何使用Python实现论坛关键字的抓取过程。 环境要求 Python 3.* requests库 Beauti…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部