首页 > 其他分享 >多线程爬虫

多线程爬虫

时间:2023-08-20 18:11:19浏览次数:44  
标签:异步 多线程 爬虫 线程 进程 GIL CPU

python GIL锁

同步线程的一种机制,即使在多处理器也是仅有一个线程在执行

避免GIL

用multiprocessing替代Thread

用多进程代替多线程,每个进程有自己的独立的GIL,不会出现进程之间的GIL争抢。

多进程的创建和销毁开销也会更大,成本高

LOCK锁 原子操作

 一步是计算,一步的赋值,所以不是+1-1,a=0+1=1  b=0-1=-1 number=b number=a

因为时分GIL操纵,还没赋值就变成计算了,要实现的话,自己在累加前面添加锁

look.acquire(),最后必须解锁look.release()

递归锁RLOCK

只有拿到锁的线程才能释放,同一线程可以多次拿到锁

多进程

命令一样,名字改成multiprocessing.process()

进程通信

python多进程之间默认无法通信,因为是并发执行的,所以需要借助其他数据结构

进程池和线程池 优化操作(可用)

(processes=X)X为大小

 右边代码就是逐步提交,左边是提交100个同时进行

线程池

pip install threadpool 

单线程30S的任务,10线程并发3秒完成

异步编程

concurrent futures模块

 单线程执行CPU密集型,线程池执行也是时间是一样的

是因为多个CPU多核,但是只在一个进程里GIL锁,所以也只能有一个在进行

CPU运行的,用多进程,不要用多线程。

IO密集型才用多线程。

 

 

 异步爬虫

 一般函数用concurrent

 

 分布式Python编程

大任务分布分散成小任务,兼容不同环境的框架如Celery

就是一个中转站

 Celery入门程序

 定义任务dealy 异步提交任务

AsyncResult会等待任务返回

get取得结果

 

标签:异步,多线程,爬虫,线程,进程,GIL,CPU
From: https://www.cnblogs.com/JWmorning/p/17644343.html

相关文章

  • 爬虫开发网络基本知识
    爬虫开发网络基本知识1.HTTP与HTTPS超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比......
  • 为什么 Java 坚持多线程不选择协程?
    1.引言在编程的世界里,多线程和协程是两种主要的并发处理方法。Java,作为一种广泛使用的编程语言,从其早期版本开始就深入支持多线程。那么,为什么Java坚持使用多线程而不是协程?要理解这个问题,我们需要深入探讨两者之间的差异以及Java的设计哲学。2.多线程和协程的基本差异多线程:线程......
  • 动态爬虫-时光网影评
    importrequestsimporttimeheaders={'user-agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36','referer':'http://movie.mtime.com/209164......
  • 多线程 问答
    1、线程的状态或什么周期新建,就绪,运行,阻塞,销毁new,runnable,running,blocked,terminated java角度  2、java里面,wait和sleep的区别wait是object的方法,等待时会释放锁sleep是线程Thread的方法,睡眠时不会释放持有的对象锁,需要捕获异常。结束睡眠后,进入runnable状态。......
  • Socks5、IP代理在爬虫开发与HTTP通信中的应用
    随着互联网的不断发展,代理服务器成为网络工程师和数据爬虫开发者的关键工具。本文将深入探讨Socks5代理、IP代理以及它们在网络安全、爬虫开发和HTTP通信中的重要作用。1.代理服务器:保障隐私与安全的中间人代理服务器是位于客户端与目标服务器之间的中间服务器,用于传递网络请求。......
  • c++ 多线程
    #include<iostream>#include<functional>#include<thread>#include<future>//std::promise,std::future#include<chrono>voidprint_int(std::future<int>&fut){intx=fut.get();......
  • 基于Python的招聘网站爬虫及可视化的实现-计算机毕业设计源码+LW文档
    开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PyCharm浏览器:谷歌浏览器DROPTABLEIFEXISTSa6woc_zhaopinxinxi;/*!40101SET@saved_cs_client=@@character_set_client/;/!40101SETcharacter_set_cli......
  • 2023年爬虫有哪些好用的付费代理IP?芝麻代理品易代理快代理熊猫代理……
    在我加班到凌晨2点的时候,第N次收到HTTP代理返回:项目是没办法接着做了,回家也是不可能回家的,烦得很一时半会还没想走,这种情况谁懂?开始知乎摸鱼,翻到这个:哈?这不就是1*88源头厂家的意思?????说这个我可就立马福尔摩斯附体了啊,今天我可非得找到你这个家伙!中间曲折的过程我就不重复说了,直接给我......
  • 提高批量爬虫采集效率的7个实用技巧
    批量爬虫采集是数据获取的重要手段,但如何提高其效率却是让很多程序员头疼的问题。本文将分享七个实用技巧,帮助你优化批量爬虫采集工作,提高效率和产出。1.优化请求频率:合理设置访问频率是提高爬虫效率的关键。根据网站的响应速度和机器的承载能力,合理调整请求间隔时间,避免过于频繁或......
  • 隧道代理被识别?爬虫编程的应对策略与解决方案
    没有遇到使用了隧道代理后,还是被网站识别到的问题?别急,今天我来分享一些解决识别问题的妙招!这些方法简单易行,让你的爬虫工作顺利进行,快来跟我一起看看吧!先了解一下,为什么爬虫使用隧道代理后仍然被识别?隧道代理是一种通过在本地计算机和目标服务器之间建立一个安全的隧道来隐藏真实IP......