Python3爬虫系列02 (理论) - Python并发编程

  • 原创
  • Madman
  • /
  • /
  • 0
  • 1742 次阅读

spider 02-min.jpg

Synopsis: 本文是整个爬虫系列的理论基础,试想一下,如果你的爬虫只能一次下载一张图片,那要爬完整个图片网站的时间会让人抓狂,所以我们需要让程序能够并发,同时请求多张图片资源,因为网络传输时间对于CPU来说太漫长了,并发的好处是可以合理的解决CPU和网络I/O之间的速度鸿沟

代码已上传到 https://github.com/wangy8961/python3-concurrency ,欢迎star

1. 并发编程

1.1 为什么需要并发

device CPU cycles Proportional "human" scale
L1 cache 3 3 seconds
L2 cache 14 14 seconds
RAM 250 250 seconds
disk 41,000,000 1.3 years
network 240,000,000 7.6 years

假设CPU读取L1缓存要用3秒,那么读取网络I/O要用7.6年!CPU的速度远快于磁盘I/O或网络I/O,如果使用同步阻塞的方式去请求1000张图片,在只有一个进程的情况下,一旦遇到I/O操作(请求第1张图片数据),当前进程被挂起,直到I/O操作完成,才能继续请求第2张图片

1.2 并发与并行的区别

concurrency-parallelism

想象一下,你正在做饭和写小说,看起来你好像在同时做这两件事,但你不过是在这两件事之间不断切换而已,当你在等待水煮沸的时候你在写小说,当你要处理蔬菜等食材时你会暂停写小说,这种方式称为并发,CPU会快速的切换执行多个任务,由于CPU的时钟周期对于人眼来说太快了,以至于你会感觉好像多个任务是同时在执行一样,就好像你可以在电脑上看电影同时与朋友网络聊天。要实现并行,必须有多核CPU。就好像有两个人,一个烹饪,另一个同时写小说

1.3 并发编程的方式

Python中如何实现并发编程(concurrent programming),即 Do Multiple Things At Once:

  • 多进程
  • 多线程
  • 异步编程(asynchronous programming)

2. Processes vs. Threads vs. Async

Processes Threads Async
Optimize waiting periods Yes (preemptive) Yes (preemptive) No (cooperative)
Use all CPU cores Yes No No
Scalability Low (ones/tens) Medium (hundreds) High (thousands+)
Use blocking standard library functions Yes Yes No
GIL interference No Some No

2.1 Multiple Processes

  • zwalker
  • nokey
  • 深拥梦i22522
  • 浮川大大
  • LinSanxian
  • x00miya
  • xzeu
  • boylin
  • xingag
  • shit
  • Kade
  • 一颗赛艇yh
未经允许不得转载: LIFE & SHARE - 王颜公子 » Python3爬虫系列02 (理论) - Python并发编程

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.