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

相关文章

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

C#使用SendMessage实现进程间通信的示例代码

《C#使用SendMessage实现进程间通信的示例代码》在软件开发中,进程间通信(IPC)是关键技术之一,C#通过调用WindowsAPI的SendMessage函数实现这一功能,本文将通过实例介绍... 目录第一章:SendMessage的底层原理揭秘第二章:构建跨进程通信桥梁2.1 定义通信协议2.2

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多