Queue的多线程爬虫和multiprocessing多进程

2024-03-31 05:28

本文主要是介绍Queue的多线程爬虫和multiprocessing多进程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Queue的模块里面提供了同步的、线程安全的队列类,包括FIFO(先入后出)队列Queue、FIFO(后入先出)LifoQueue和优先队列PriorityQueue。(在上个文件创建了爬取文件)我们使用这个方法来获取,代码如下:

import threading
import requests
import time
import queue as Queuelink_list=[]
with open('alexa.tex','r')as file:file_list=file.readlines()for eachone in file_list:link=eachone.split('\t')[1]link=link.replace('\n','')link_list.append(link)
start=time.time()
class myThread(threading.Thread):def __init__(self,name,q):threading.Thread.__init__(self)self.name=nameself.q=qdef run(self):print('Starting'+self.name)while True:try:crawler(self.name,self.q)except:breakprint('Exiting'+self.name)
def crawler(threadName,q):url=q.get(timeout=2)try:r=requests.get(url,timeout=20)print(q.qsize(),threadName,r.status_code,url)except Exception as e:print(q.qsize(),threadName,url,'Error:',e)aii_list=['Thread-1','Thread-2','Thread-3','Thread-4','Thread-5']workQueue=Queue.Queue(1000)
thread=[]#建立新的线程
for thName in aii_list:thread=myThread(thName,workQueue)thread.start()aii_list.append(thread)#填充列表
for i in link_list:workQueue.put(link_list)#结束线程
for t in thread:thread.join()end=time.time()
print('当前的总时间:',end-start)
print('Exiting')

对象传入myThread中;

thread = myThread(tName,workQueue)

 使用一个for循环来实现:

for url in link_list=:

      work.Queue.put(url)

多进程: 

 使用multiprocess库有两种方法:1.Process+Queue的方法    2.Pool+Queue的方法

我们因先了解计算机的cpu的核心:

from multiprocessing import cpu_count
print(cpu_count())

 然后代码示例:

from multiprocessing import Process,Queue
import requests
import timelink_list=[]
with open('alexa.tex','r')as file:file_list=file.readlines()for eachone in file_list:link=eachone.split('\t')[1]link=link.replace('\n','')link_list.append(link)
start=time.time()
class myProcess(Process):def __init__(self,q):Process.__init__(self)self.q=qdef run(self):print('Starting'+self.name)while True:try:crawler(self.name,self.q)except:breakprint('Exiting'+self.name)
def crawler(q):url=q.get(timeout=2)try:r=requests.get(url,timeout=20)print(q.qsize(),r.status_code,url)except Exception as e:print(q.qsize(),url,'Error:',e)if __name__ == '__main__':ProcessNames=['prcess1','prcess2','prcess3']workQueue=Queue(1000)for url in link_list:workQueue.put(url)for i in range(0,3):p=myProcess(workQueue)p.daemon=Truep.start()p.join()end=time.time()print('当前的总时间:',end-start)print('Exiting')

与多线程相比多进程相比,多进程里面设置了:(当父进程结束后,子进程就会自动被终止)

p.daemon=Ture

 并且multprocessing自带了Queue

这篇关于Queue的多线程爬虫和multiprocessing多进程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/863505

相关文章

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现