当前位置: 首页> 汽车> 维修 > 桩基工程信息网发布_网络推广沈阳_搜索引擎的工作原理有哪些_互联网推广运营是做什么的

桩基工程信息网发布_网络推广沈阳_搜索引擎的工作原理有哪些_互联网推广运营是做什么的

时间:2025/7/12 2:06:26来源:https://blog.csdn.net/kouweizhu/article/details/145638006 浏览次数: 0次
桩基工程信息网发布_网络推广沈阳_搜索引擎的工作原理有哪些_互联网推广运营是做什么的

文章目录

一、引入

二、如何使用

三、主要组成部分

1. URL队列和结果队列

2. 类包装

3. 函数包装

4. 线程池

四、 Queue模块中的常用方法

一、引入

我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理。

二、如何使用

爬虫使用多线程来处理网络请求,使用线程来处理URL队列中的url,然后将url返回的结果保存在另一个队列中,其它线程在读取这个队列中的数据,然后写到文件中去

三、主要组成部分

1. URL队列和结果队列

将要爬去的url放在一个队列中,这里使用标准库Queue。访问url后的结果保存在结果队列中

初始化一个URL队列

from queue import Queue
urls_queue = Queue()
out_queue = Queue()

2. 类包装

使用多个线程,不停的取URL队列中的url,并进行处理:

import threading
​
class ThreadCrawl(threading.Thread):def __init__(self, queue, out_queue):threading.Thread.__init__(self)self.queue = queueself.out_queue = out_queue
​def run(self):while True:item = self.queue.get()

如果队列为空,线程就会被阻塞,直到队列不为空。处理队列中的一条数据后,就需要通知队列已经处理完该条数据

3. 函数包装

from threading import Thread
def func(args)pass
if __name__ == '__main__':info_html = Queue()t1 = Thread(target=func,args=(info_html,))

4. 线程池

# 简单往队列中传输线程数
import threading
import time
import queue
​
class Threadingpool():def __init__(self,max_num = 10):self.queue = queue.Queue(max_num)for i in range(max_num):self.queue.put(threading.Thread)
​def getthreading(self):return self.queue.get()
​def addthreading(self):self.queue.put(threading.Thread)
​
​
def func(p,i):time.sleep(1)print(i)p.addthreading()
​
​
if __name__ == "__main__":p = Threadingpool()for i in range(20):thread = p.getthreading()t = thread(target = func, args = (p,i))t.start()

四、 Queue模块中的常用方法

Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步

Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当Queue.get(False)
Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作

关键字:桩基工程信息网发布_网络推广沈阳_搜索引擎的工作原理有哪些_互联网推广运营是做什么的

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: