多线程并发抓取

110 阅读1分钟

多线程并发抓取

单线程太慢的话,就需要多线程了,这里给个简单的线程池模板 这个程序只是简单地打印了1-10,但是可以看出是并发的。

虽然说python的多线程很鸡肋,但是对于爬虫这种网络频繁型,还是能一定程度提高效率的。

123456789101112131415161718192021222324252627282930from 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()