多线程并发抓取
单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了1-10,但是可以看出是并发的。
虽然说python的多线程很鸡肋,但是对于爬虫这种网络频繁型,还是能一定程度提高效率的。
| 123456789101112131415161718192021222324252627282930 | from threading import Thread``from Queue import Queue``from time import sleep # q是任务队列``#NUM是并发线程总数``#JOBS是有多少任务``q = Queue()``NUM = 2``JOBS = 10``#具体的处理函数,负责处理单个任务``def do_somthing_using(arguments):`` ``print arguments``#这个是工作进程,负责不断从队列取数据并处理``def working():`` ``while True:`` ``arguments = q.get()`` ``do_somthing_using(arguments)`` ``sleep(1)`` ``q.task_done()``#fork NUM个线程等待队列``for i in range(NUM):`` ``t = Thread(target=working)`` ``t.setDaemon(True)`` ``t.start()``#把JOBS排入队列``for i in range(JOBS):`` ``q.put(i)``#等待所有JOBS完成``q.join() |
|---|