简单爬虫的通用步骤——多线程/多进程爬虫示例

本文介绍了Python中多线程和多进程的基础知识,包括多线程的基本操作、多进程的基本操作,并给出了爬虫程序示例。通过对比,指出在下载类爬虫中,多线程能充分利用网络性能,而计算密集型任务适合多进程。最后强调了根据爬虫任务特性合理分配线程和进程的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

前言

介绍

多线程基本操作

多进程基本操作

程序示例

总结


前言

很久很久以前,我写了篇文章《简单爬虫的通用步骤》,这篇文章中对于多线程/多进程/分布式/增量爬虫没有具体例子进行解释,现在来填坑了。

介绍

单线程爬虫就像是一个人处理一堆事情,没法同时处理很多事,效率单一。多线程爬虫可以比作好多人组了一个team来处理这一堆事情。多进程爬虫可以说是,有多个team(team里面可能有一个或多个人)来处理一堆事情。大多数情况下,多线程/多进程比单线程效率高得多。多进程相比于多线程,开销较大,在规模不大的问题处理上,可能多线程比多进程效率高,就好比team内部交流比跨team交流顺畅。

多线程基本操作

仅介绍本文中用到的多线程基本操作以供入门,需要更多进阶知识,请自行学习。

在python中,建议使用threading高级模块,而不是_thread模块。

from threading import Thread
import time


def func1(index):
    print("I'm thread {}".format(index))
    time.sleep(index)
    print("Thread {} end".format(index))


if __name__ == '__main__':
    start_time = time.time()
    thread_list = []
    # 实例化一个线程
    # target是目标函数,记得别加括号
    # args是目标函数的参数,当参数个数仅有一个时,记得后面加上','逗号
    for index in range(1,10):
        thread_list.append(Thread(target=func1, args=(index,)))
    # 用start启动线程
    for t in thread_list:
        t.start()
    # join表示等待线程执行结束
    for t in thread_list:
        t.join()
    print("用时:{:.2f}s".format(time.time()-start_time))

多线程通信没什么值得注意的,用全局变量也行,用类中的公有成员也行。

但要注意一点,多线程共享一个变量时,同时读写会造成数据错误。多进程会将变量各自

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值