首页 > 编程语言 >Python多线程爬虫又来了

Python多线程爬虫又来了

时间:2023-05-23 09:34:33浏览次数:33  
标签:thread Python 爬虫 threading 线程 多线程 my

Python多线程的主要好处是可以在单个程序中同时执行多个任务,从而提高应用程序的性能和效率。具体来说,多线程有以下几个优点:

提高CPU利用率:通过多线程,可以更充分地利用CPU资源,尤其适用于计算密集型的任务。

降低IO阻塞:对于需要等待IO操作完成的任务(如网络请求或文件读写),将它们放入单独的线程中可以避免阻塞主线程,提升应用程序的响应速度。

充分利用多核CPU:对于支持多核CPU的设备,多线程可以充分利用各核心之间的并行处理能力,加快任务的执行速度。

总之,使用多线程可以充分利用计算机硬件资源,提高程序的效率和性能。但需要注意的是,在Python中由于全局解释器锁(GIL)的存在,多线程无法真正实现并行处理。

模板1

在Python中,多线程可以通过使用 threading 模块来实现。下面是一个简单的例子:

import threading

def my_function():
    print("Thread started")
    for i in range(1, 6):
        print("Hello from thread {}".format(threading.current_thread().name))

my_thread = threading.Thread(target=my_function)
my_thread.start()

print("Main thread finished")

这个例子创建了一个新的线程 my_thread,并在其中运行函数 my_function。调用 start() 方法启动线程,并使用 current_thread() 函数获取当前线程的名称。最后,主线程输出一条消息指示它已经结束。

需要注意的是,在Python中,由于GIL(全局解释器锁)的存在,多线程并不能真正地实现并发执行。如果需要实现真正的并发,可以考虑使用多进程或异步编程。

模板2

以下是一个使用多线程爬取网页内容的 Python 爬虫案例:

import threading
import requests

class SpiderThread(threading.Thread):
    def __init__(self, url):
        threading.Thread.__init__(self)
        self.url = url

    def run(self):
        resp = requests.get(self.url)
        print(resp.text)

urls = ['https://www.baidu.com', 'https://www.google.com', 'https://www.bing.com']

threads = []
for url in urls:
    thread = SpiderThread(url)
    thread.start()
    threads.append(thread)

# 等待所有线程结束
for thread in threads:
    thread.join()

在这个案例中,我们创建了一个 SpiderThread 类,继承自 threading.Thread 类,用于定义要执行的线程任务。在这个例子中,我们使用 requests 库向指定的网址发送 GET 请求,并打印响应内容。

接着,我们循环遍历要爬取的网址,在每个网址上创建一个 SpiderThread 实例,并启动线程执行任务。最后,我们使用 join 方法等待所有线程执行完毕。

标签:thread,Python,爬虫,threading,线程,多线程,my
From: https://www.cnblogs.com/q-q56731526/p/17422336.html

相关文章

  • Python自动化办公对每个子文件夹的Excel表加个表头(Excel不同名)(上篇)
    大家好,我是皮皮。一、前言上一篇文章,我们抛出了一个问题,这篇文章来进行解答。如果针对子文件夹下不同的Excel表名,应该如何处理?二、实现过程我们继续问ChatGPT,它给出了一个方法,如下所示:提问如下:假如你是一名Python程序员,现在你有一个自动化办公的需求,你桌面上有一个新建文件夹......
  • python的私有属性
    对于python来说,其并没有像C#、Java那样使用关键字的形式对变量进行访问控制而是使用左至少两个下划线,右至多一个下划线的形式(__kwargs)表明一个变量是私有变量第一种场景,没有使用私有变量,结果与预期有出入,结果输出b3而在我们的预期中,子类传入两个kwargs,子类的init函数对kwarg......
  • centos升级python到3.8
    环境:centos7.9一、卸载自带python3.7#卸载python3rpm-qa|greppython3|xargsrpm-ev--allmatches--nodeps#删除所有残余文件whereispython3|xargsrm-frv#查看现有安装的python,验证是否删除干净whereispython二、安装python3.8前置依赖yuminstallzl......
  • python day08 字典、元组、集合内置方法
    字典的内置方法定义方式d={'usernamne':"kevin"}定义空字典:d={}1.key取值dic={'name':'kevin','age':18,'hobbies':['playgame','basketball']}print(dic['name'])#kevinp......
  • 用Python开发输入法后台(3)——我自己的输入法的规则
    我的输入法基本开发完成了,如下所示:  现在总结一下我的输入规则:1.用户输入几个字符,就代表几个字的词.比如输入'w'表示以w开头的单字词,输入wm,表示拼音首字母开头的双字词,gsm表示拼音首字母开头的3字词; 2.输入分号,表示词的个数已固定,需要进一步筛选;同时......
  • python调用父类方法的三种方式(super调用和父类名调用)
    子类调用父类的方法的三种方式:父类名.方法名(self)super(子类名,self).父类方法名()super().父类方法名注意:super()通过子类调用当前父类的方法,super默认会调用第一个父类的方法(适用于单继承的多层继承如下代码:#自定义师傅类-古法classMaster(object):#方......
  • 用Python将女朋友的照片做成壁纸软件,实现桌面壁纸自动更换!
    话说兄弟们,女朋友生气了都是怎么哄的?不会吧不会吧,不会有人还是单身狗吧!  算了,还是回到正题吧,再说我要挨打了~今天咱们来交流一下程序员是怎么哄女朋友的,话不多说直接开始!准备工作1、环境首先我们准备好环境和编辑器,我使用的是:Python3.8解释器Pycharm编辑器2、......
  • python基础08
    字典的内置方法1#dic={'username':"kevin",'age':18}2#定义空字典3#d={}4#info=dict(username='kevin',age=18)5#print(info)67##1.支持key取值8#new_dic=dic['username']9#print(new_dic)10#ite......
  • python 问题修复ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+
    目录python问题修复ImportError:urllib3v2.0onlysupportsOpenSSL1.1.1+升级openssl版本降低urllib版本python问题修复ImportError:urllib3v2.0onlysupportsOpenSSL1.1.1+这个问题时python版本安装的urllib3版本过高,而openssl版本太低导致的解决无非两种方法,降低......
  • python pip超时解决方案
    目录pythonpip超时解决方案使用-i选项指定pip源使用--default-timeout选项增加超时时间增加重试次数pythonpip超时解决方案当执行pip3install命令时出现超时错误,通常是由于网络连接不稳定或网络速度较慢引起的。为了解决这个问题,你可以尝试以下方法:使用-i选项指定......