爬虫学习 异步爬虫(五)

news/2024/7/19 10:32:16 标签: 爬虫, 学习, python

多线程 多进程 协程

进程 运行中的程序
线程 被CPU调度的执行过程,操作系统 运算调度的min单位
在进程之中,进程中实际运作单位

python">from threading import Thread


#创建任务
def func(name):
    for i in range(100):
        print(name,i)


if __name__ == '__main__':
    #创建线程
    t1 = Thread(target = func,args=("一一一",))#Thread() ,必须要求元组
    t2 = Thread(target = func,args=("二二二",))
	t1.start()
	t2.start()
print("我是主线程")
#1个主线程  2个副线程

面向对象方法

python">from threading import Thread

class MyThread(Thread):
    def __init__ (self,name):#init 传参
        super(MyThread,self).__init__()#初始化
        self.name = name

    def run(self): #run方法 -->返回值可不写
        for i in range(100):
            print(self.name,i)

if __name__ == '__main__':
    t1 = MyThread("一一一")
    t2 = MyThread("二二二")
    t1.start()
    t2.start()

线程池

python">from concurrent.futures import ThreadPoolExecutor

def func(name):
    for i in range(10):
        print(name,i)

if __name__ == '__main__':
    with ThreadPoolExecutor(10) as t:
        for i in range(100):
            t.submit (func,f"num{i}")

返回值使用

python">from concurrent.futures import ThreadPoolExecutor

def func(name):
    for i in range(10):
        print(name,i)
        return name
    
def fn(res):
    print(res.result())

if __name__ == '__main__':
    with ThreadPoolExecutor(10) as t:
        for i in range(100):
            t.submit (func,f"num{i}").add_done_callback(fn)   #返回 即执行 callback函数
            #顺序不确定

map映射
map返回值 有顺序

python">from concurrent.futures import ThreadPoolExecutor

def func(name):
    for i in range(10):
        print(name,i)
        return name
    
def fn(res):
    print(res.result())

if __name__ == '__main__':
    with ThreadPoolExecutor(10) as t:
        for i in range(100):
            t.submit (func,f"num{i}").add_done_callback(fn)   #返回   即执行 callback函数   顺序不确定
            #绑定fn函数   fn 返回值-result()?
python">if __name__ == '__main__':
    with ThreadPoolExecutor(10) as t:
    result = t.map(func,["111","222","333"])
        for r in result:
            print(r)
            # map 返回值为生成器,返回顺序一致

线程池案例

python">#北京新发地
import  requests
from lxml import etree
from concurrent.futures import ThreadPoolExecutor#线程池

f = open("线程池案例.csv","w",encoding="utf-8")

def download (url):
    resp = requests.get(url)
    tree = etree.HTML(resp.text)

    tr_list = tree.xpath("//table[@class='hq_table']/tr")
    for tr in tr_list:
        td_texts = tr.xpath("./td/text()")
        s = ",".join(td_texts)
        f.write(s)
        f.write('\n')

if __name__ =='__main__':
    with ThreadPoolExecutor(10) as t: #线程池
        for i in range(1,16964):
            url = f"http...{i}.shtml"
            #download(url) 线程池不能这么干
            t.submit(download,url)

http://www.niftyadmin.cn/n/5224026.html

相关文章

SAP ABAP弹出对对话框错误信息设计

弹出对对话框错误信息设计、REUSE_ALV_POPUP_TO_SELECT 代码如下: IF lw_item_date-menge > lv_atp_other.lw_error-ebelp lw_item_date-ebelp.lw_error-matnr lw_item_date-matnr.lw_error-zlabst lv_labst.lw_error-zoccupy_so lv_occupy_s…

SpringBoot : ch09 整合Redis

前言 当你的应用程序需要一个快速、可扩展的内存数据库时,Redis是一个非常流行的选择。通过将Redis与Spring Boot集成,你可以轻松地利用Redis的功能,例如缓存、会话存储和消息队列等,从而提升应用程序的性能和可伸缩性。 在本教…

一篇教会你java内存图怎么画

首先我们要知道: 线程的本质是栈;程序执行时,在java栈中,成立一个线程栈,调用方法时方法不断压栈出栈,这个压栈出栈的过程就是线程执行的过程。方法执行 拷贝入栈 ,执行完成 出栈,从…

医疗影像数据集—CT、X光、骨折、阿尔茨海默病MRI、肺部、肿瘤疾病等图像数据集

最近收集了一大波关于CT、X光等医疗方面的数据集包含骨折、阿尔茨海默病MRI、肺部疾病等类型的医疗影像数据,废话不多说,给大家逐一介绍!! 1、彩色预处理阿尔茨海默病MRI(磁共振成像)图像数据集 彩色预处理阿尔茨海默病MRI(磁共…

Apache Airflow (十四) :Airflow分布式集群搭建及测试

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

Ubuntu:安装Powershell

Powershell的安装与使用: 1)安装Powershell:在终端依次运行以下命令即可: $ sudo apt-get update $ sudo apt-get install -y wget apt-transport-https software-properties-common $ wget -q "https://packages.microsof…

MacBook如何远程控制华为手机?

将手机屏幕投影到电脑上可以提供更大的屏幕空间,方便观看电影、浏览照片、阅读文档等。然而,除了想将手机投屏到电脑,还想要在电脑上直接操作手机,有方法可以实现吗? 现在使用AirDroid Cast的远程控制手机功能就可以实…

从0开始学习JavaScript--JavaScript 箭头函数

JavaScript的现代语法,箭头函数(Arrow Functions)是一个不可忽视的重要部分。它们不仅提供了更简洁的语法,还改变了函数的作用域规则。在这篇文章中,将深入研究JavaScript箭头函数的概念、语法、用法以及它们与传统函数…