python并发编程:使用多线程,Python爬虫被加速10倍

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: python并发编程:使用多线程,Python爬虫被加速10倍

往期文章:

  1. 并发编程简介
  2. 怎样选择多线程多进程多协程
  3. Python速度慢的罪魁祸首,全局解释器锁GIL

Python创建多线程的方法

  1. 准备一个函数
    def my_func(a,b):
     do_craw(a,b)
    
  2. 怎么创建一个线程
    import threading
    t = threading.Thread(target=my_func,args=(100,200))
    
  3. 启动线程
    t.start()
    
  4. 等待结束
    t.join()
    

使用多线程,python爬虫被加速10倍

下面通过一个简单的案例,通过爬取博客园的内容,通过使用单线程和多线程来对比,来看看爬取的速度。


##cnblogs_spider

import requests

urls = [
    "https://www.cnblogs.com/#p{}".format(page)
    for page in range(1,51)
]

def craw(url):
    r =requests.get(url)
    print(url,len(r.text))

urls 是通过列表推导式生成50个url的连接。

import cnblogs_spider
import threading
from loguru import logger
import time

def single_thread():
    logger.info("single_thread begin")
    for url in cnblogs_spider.urls:
        cnblogs_spider.craw(url)
    logger.info("single_thread end")



def multi_thread():
    logger.info("single_thread begin")
    threads = []

    for url in cnblogs_spider.urls:
        threads.append(
            threading.Thread(target=cnblogs_spider.craw,args=(url,))
        )

    for task in threads:
        task.start()

    for task in threads:
        task.join()
    logger.info("single_thread end")

if __name__ == "__main__":
    start = time.time()
    single_thread()
    end = time.time()
    logger.info("single thread cost: {}".format(end-start))
    start = time.time()
    multi_thread()
    end = time.time()
    logger.info("multi thread cost: {}".format(end-start))

执行完之后,看到多线程明显比单线程花费的时间更少:

目录
相关文章
|
3天前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
15天前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略
|
15天前
|
数据采集 网络协议 API
协程+连接池:高并发Python爬虫的底层优化逻辑
协程+连接池:高并发Python爬虫的底层优化逻辑
|
24天前
|
数据采集 存储 Web App开发
处理Cookie和Session:让Python爬虫保持连贯的"身份"
处理Cookie和Session:让Python爬虫保持连贯的"身份"
|
26天前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
3月前
|
人工智能 安全 调度
Python并发编程之线程同步详解
并发编程在Python中至关重要,线程同步确保多线程程序正确运行。本文详解线程同步机制,包括互斥锁、信号量、事件、条件变量和队列,探讨全局解释器锁(GIL)的影响及解决线程同步问题的最佳实践,如避免全局变量、使用线程安全数据结构、精细化锁的使用等。通过示例代码帮助开发者理解并提升多线程程序的性能与可靠性。
114 0
|
安全 数据安全/隐私保护 数据中心
Python并发编程大挑战:线程安全VS进程隔离,你的选择影响深远!
【7月更文挑战第9天】Python并发:线程共享内存,高效但需处理线程安全(GIL限制并发),适合IO密集型;进程独立内存,安全但通信复杂,适合CPU密集型。使用`threading.Lock`保证线程安全,`multiprocessing.Queue`实现进程间通信。选择取决于任务性质和性能需求。
224 1
|
11月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
12月前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
128 3
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
188 3

热门文章

最新文章

推荐镜像

更多