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基础知识之函数,类,模块

    Python是一门灵活多变的编程语言,在学习过程中,函数、类和模块是必不可少的基础知识。本文将详细讲解Python的函数、类和模块,让你了解其重要性和运用方法。 函数 在Python中,函数是一种可重用的代码块,用于完成特定的任务。以下是Python函数的定义: # 定义函数 def function_name(parameters): statement(…

    python 2023年5月31日
    00
  • Python之字符串的遍历的4种方式

    下面是“Python之字符串的遍历的4种方式”的完整攻略。 一、为什么需要字符串遍历 在编程过程中,我们经常需要对字符串进行遍历,比如要在一个字符串中查找特定字符或者进行替换操作等。因此了解字符串遍历的方法是很重要的。 二、Python字符串的遍历方式 Python字符串可以按照以下4种方式进行遍历。 1. for循环遍历 使用for循环遍历字符串是最简单、…

    python 2023年6月5日
    00
  • Python 爬虫学习笔记之单线程爬虫

    下面我就为你详细讲解“Python 爬虫学习笔记之单线程爬虫”的完整攻略。 Python 爬虫学习笔记之单线程爬虫 什么是单线程爬虫? 单线程爬虫是指所有的爬取操作都在一个线程上执行,也就是说只有在当前任务完成之后,才会继续下一个任务。单线程爬虫实际上是指的单进程爬虫。 单线程爬虫的优缺点 优点 编写简单,易于上手 不会出现并发问题 缺点 爬虫速度慢 对网站…

    python 2023年5月19日
    00
  • pandas读取csv格式数据时header参数设置方法

    pandas是Python中常用的数据处理库之一,可以用来读取各种不同格式的数据。当我们读取csv格式的数据时,常常会涉及到如何设置header参数,以正确处理数据文件中的列名信息。 下面是pandas读取csv格式数据时header参数设置的完整攻略,包含以下几个步骤: 步骤1:导入pandas库 在开始之前,我们需要先导入pandas库。代码如下: im…

    python 2023年5月13日
    00
  • python常用小脚本实例总结

    Python常用小脚本实例总结 简介 本文将分享几个常用的Python小脚本实例,这些脚本几乎可以应用在任何领域,也可以作为日常工作生活的小工具。 实例1:批量下载网页图片 我们经常需要从一个网页上面抓取很多图片,如果手动一个一个下载的话效率太低,这时候可以使用Python进行批量下载。我们在代码中引入requests和os两个模块,前者用于向服务器发起请求…

    python 2023年5月13日
    00
  • Python操作mongodb数据库的方法详解

    下面是“Python操作mongodb数据库的方法详解”的完整攻略: 目录 准备工作 连接MongoDB数据库 插入文档 查询文档 更新文档 删除文档 示例说明 示例一:插入一条文档 示例二:查询所有文档并打印出来 准备工作 为了能够使用Python操作mongodb数据库,我们需要先安装pymongo库。可以使用pip进行安装: pip install p…

    python 2023年5月14日
    00
  • Python中处理字符串的相关的len()方法的使用简介

    标题 Python中处理字符串的相关的len()方法的使用简介 正文 在Python中,字符串是一种不可变的类型,它是由字符组成的一种序列。对于字符串的处理,len()方法是一种非常常用的方法,它可以获取字符串的长度。本文将对Python中len()方法的使用进行详细介绍,包括基本用法、注意事项及示例。 基本用法 len()方法是Python内置的方法,用于…

    python 2023年6月5日
    00
  • 用python制作游戏外挂

    下面我将为您详细讲解如何用Python制作游戏外挂的完整攻略。 攻略步骤 1. 初步调研 在开始制作外挂之前,我们需要初步调研目标游戏的相关信息,包括游戏的运行原理,资源文件的存取方式,目标游戏的内存结构等信息。这些信息将有助于我们更好地理解游戏,设计出更加高效可靠的外挂程序。 2. 选择合适的开发环境 在开始编写代码之前,我们需要选择一个适合的开发环境。推…

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