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系统管理与进程任务管理方式

《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... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab