一个python多线程爬虫,将爬取的内容写入到文本文件中,您觉得这时候的瓶颈是网速还是文件IO呢

申晨 发布于 2013/04/27 10:44
阅读 6K+
收藏 2

@索隆 你好,想跟你请教个问题:

一个python多线程爬虫,将爬取的内容写入到文本文件中,您觉得这时候的瓶颈是网速还是文件IO呢?

出现在“问题补充”中的这种现象的原因是什么?谢谢大家

以下是问题补充:

@申晨:做测试时,我指定了新浪爬深度为4的网页, 在爬到第3层时,内存突然爆增,导致程序崩溃。经过调试发现,正是以上的方法导致的:多线程并发去下载网页,无论主线程做的是多么不耗时的动作,始终是无法跟上下载的速度的,更何况主线程要负责耗时的文件IO操作,因此,结果队列中的结果没能被及时取出,越存越多却处理不来,导致内存激增。 曾想过用另外的线程池来负责处理结果,可这样该线程池的线程数不好分配,分多了分少了都会有问题,而且程序的实际线程数就多于用户指定的那个线程数了。因此,干脆让原线程在下载完网页后,不用把结果放进结果队列,而是继续下一步的操作,直到把网页存起来,才结束该线程的任务。 http://lvyaojia.sinaapp.com/2012/10/python%E7%88%AC%E8%99%AB%E6%80%BB%E7%BB%93/ (2013/04/27 13:19)
加载中
0
voov
voov
wangluo
0
sidneysu
sidneysu
对方的连接限制。
0
狐狸糊涂
狐狸糊涂
一般情况下网络的IO吞吐是要远低于本地磁盘的。
0
申晨

引用来自“狐狸糊涂”的答案

一般情况下网络的IO吞吐是要远低于本地磁盘的。
那使用多线程会更充分利用网络IO吞吐吗
狐狸糊涂
狐狸糊涂
回复 @申晨 : 你这种情况应该是因为多个线程负责下载,单独一个线程负责写文件造成的。可能是2个原因造成: 1, 网页都是小文件,写磁盘的速度肯定会相对较低。 2, 多个线程下载文件(很多小文件),一个线程写文件,为什么不让具体下载的线程负责写文件呢? 这样可能就不会在单独一个写文件的线程上造成瓶颈了。
申晨
您看看我的问题补充
z
zjwzcnjsy
你平时下载速度(包括内网的文件传输)有超过硬盘的嘛^_^
0
roylieu
roylieu

如果你是在抓取的线程里写文件,肯定是磁盘IO。

一般分两个线程,线程之间用线程安全的队列通信。

0
nicozhang
nicozhang
应该是带宽吧,如果你线程有多少,从网络读取数据的速度,远小于磁盘的读写速度。莫非你有几个网卡?
0
deleted
deleted
抓取用异步协程, 解析用多进程池, python用多线程不是好主意
返回顶部
顶部