相关衍生 pika+mongo

衍生相关 pika+mongo

很多平台不提供完整的数据展示, 翻页只能翻几页,不过提供相关推荐等方法可获取更多的数据;

使用 rabbitmq 是因为数据量可能有几十上百万, 且能持久化

mongo对于数据并不实时的更新到查询里

def main():# mongodb# client = MongoClient('localhost', 27017)client = MongoClient("mongodb://localhost:27017")db = client['renrendoc']# 保存衍生过的 collection_derive = db['doc_derive']# 待衍生 (用于去重)collection_stack = db['doc_stack']# rabbitmqcredentials = pika.PlainCredentials('guest', 'guest')parameters = pika.ConnectionParameters('localhost', 5672, '/', credentials)connection = pika.BlockingConnection(parameters)channel = connection.channel()queue_name = '123456789'  # 队列名称channel.queue_declare(queue=queue_name, durable=True)  # 声明一个队列, durable=True表示队列持久化# 初始队列, 保证存在一个符合的doc = {'doc_id': queue_name,'title': '标题名称',}channel.basic_publish(exchange='', routing_key=queue_name, body=json.dumps(doc))while True:try:# 出队method_frame, header_frame, body = channel.basic_get(queue=queue_name, auto_ack=True)if not body:logger.success("no more doc_id to derive, it's over! ")breakdoc = json.loads(body)doc_id = doc['doc_id']if collection_derive.find_one({'doc_id': doc_id}):logger.debug(f'文档已衍生过, doc_id: {doc_id}')continue# 检查判断是否符合需求if check_title(doc['title']) != 1:logger.warning(f'文档不符合需求 title: {doc["title"]}')continuequeue_state = channel.queue_declare(queue=queue_name, passive=True)logger.info(f'开始衍生 {doc["title"]} , 剩余待处理: {queue_state.method.message_count}')# 衍生文档doc_derive = derive_docs(doc_id)# detail 入库collection_derive.insert_one(doc_derive['doc_detail'])# 总获取衍生的文档all_derive_docs = doc_derive['recommend_docs'] + doc_derive['similar_docs']count = 0for doc in all_derive_docs:if collection_stack.find({'doc_id': doc['doc_id']}):count += 1continuejson_doc = json.dumps(doc)collection_stack.insert_one(doc)channel.basic_publish(exchange='', routing_key=queue_name, body=json_doc, properties=pika.BasicProperties(delivery_mode=2,  # 消息持久化, 避免重启服务丢失消息))logger.success(f'衍生文档完成 doc_id: {doc_id}, title: {doc_derive['doc_detail']['title']}, 衍生文档数量: {len(all_derive_docs) - count}')except Exception as e:logger.exception(f'衍生失败: {e}')except KeyboardInterrupt:logger.warning('程序被强行终止! KeyboardInterrupt')break# 释放资源client.close()connection.close()
def derive_docs(doc_id):"""无限衍生文档:param doc_id::return:"""# 1. 获取文档详情doc_detail = request_doc(doc_id)agg_id = doc_detail['agg_id']# 2. 获取相似文档similar_docs = request_similar_docs(agg_id)# 3. 使用相似文档获取推荐文档total_recommend_docs = []with ThreadPoolExecutor(max_workers=10) as executor:for doc in similar_docs:time.sleep(.1)executor.submit(request_recommend_docs, doc['doc_id'], agg_id).add_done_callback(lambda x: total_recommend_docs.extend(x.result()))# for doc in similar_docs:#     recommend_docs = request_recommend_docs(doc['doc_id'], agg_id)#     total_recommend_docs.extend(recommend_docs)# 根据doc_id去重,recommend_docs = list({doc['doc_id']: doc for doc in total_recommend_docs}.values())return {'doc_detail': doc_detail,'recommend_docs': recommend_docs,'similar_docs': similar_docs,}

余下函数详细实现不提供

直到队列清空抓取完成

image-20241101091640487

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Odoo | 免费开源ERP:汽车及零配件行业信息化解决方案

文 / 开源智造 Odoo亚太金牌服务 概述 围绕汽车行业产业链上下游企业的整体业务主线,提供面向汽车主机厂整车个性化制造解决方案,产业链上下游一体化协同解决方案,数字化精益制造解决方案、全价值链质量管理解决方案,数字化运营解…

【Linux】【守护进程】总结整理

守护进程(Daemon)是运行在后台的进程,通常没有与之关联的控制终端。守护进程在启动后会脱离控制终端,并继续在后台运行,即使用户退出登录或者终端关闭也不会影响它们的运行。守护进程常用于提供网络服务、定期执行任务…

Spring Cloud微服务:构建弹性、可扩展的分布式系统

Spring Cloud微服务:构建弹性、可扩展的分布式系统 在当今的软件开发领域,微服务架构已经成为构建复杂应用的首选方案。微服务架构通过将应用拆分为多个独立的服务,每个服务专注于单一的业务功能,从而提高了系统的可维护性、可扩…

vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装

一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载,传false不…

Docker配置及简单应用

谈论/理解 Docker 的常用核心部分,以下皆在 Ubuntu 操作系统下进行 1 国内源安装 Docker-ce 1.1 配置 Linux 内核流量转发 因为docker和宿主机的端口映射,本质是内核的流量转发功能,所以要对其进行配置 1.1.1 未配置流量转发 如果没有配置流…

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令,添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令,添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…

探索数据科学与大数据技术专业本科生的广阔就业前景

随着信息技术的不断发展,数据科学与大数据技术已经成为各大行业的关键推动力。在这样一个数据驱动的时代,越来越多的企业依赖数据来驱动决策、优化运营和创造价值。因此,数据科学与大数据技术专业的本科生在就业市场上具有广阔的前景和多样的…

CSS例子: 横向排列的格子

效果 HTML <view class"content"><view class"item" v-for"item of 5">{{item}}</view></view> CSS .content {height: 100vh;display: flex;flex-direction: row; flex-wrap: wrap;align-content: flex-start;backgro…

智能家居的未来:AI让生活更智能还是更复杂?

内容概要 智能家居的概念源于将各种家居设备连接到互联网&#xff0c;并通过智能技术进行控制和管理。随着人工智能的迅速发展&#xff0c;这一领域也迎来了前所未有的机遇。从早期简单的遥控器到如今可以通过手机应用、语音助手甚至是环境感应进行操作的设备&#xff0c;智能…

ios打包文件上传App Store windows工具

在苹果开发者中心上架IOS APP的时候&#xff0c;在苹果开发者中心不能直接上传打包文件&#xff0c;需要下载mac的xcode这些工具进行上传&#xff0c;但这些工具无法安装在windows或linux电脑上。 这里&#xff0c;我们可以不用xcode这些工具来上传&#xff0c;可以用国内的香…

ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染

一、组件基础 1.什么是ArkTS ArkTS是HarmoyOS优选的助力应用开发的语言&#xff0c;ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步的扩展&#xff0c;继承了TS所有的特性&#xff0c;是TS的超集。 扩展的能力如下&#xff1a; 基本语法 …

连接kafka消息队列报org.apache.kafka.clients.NetworkClient异常

启动kafka后&#xff0c;连接kafka消息队列报org.apache.kafka.clients.NetworkClient异常 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 检查kafka运行日志&#xff0c;报The broker is trying to join the wrong clu…

全文检索ElasticSearch到底是什么?

学习ElasticSearch之前&#xff0c;我们先来了解一下搜索 1 搜索是什么 ① 概念&#xff1a;用户输入想要的关键词&#xff0c;返回含有该关键词的所有信息。 ② 场景&#xff1a; ​ 1互联网搜索&#xff1a;谷歌、百度、各种新闻首页&#xff1b; ​ 2 站内搜索&#xff…

大众汽车合肥社招入职笔试测评SHL题库:综合能力、性格问卷、英语口语真题考什么?

大众汽车合肥社招入职笔试测评包括综合能力测试、性格问卷和英语口语测试。以下是各部分的具体内容&#xff1a; 1. **综合能力测试**&#xff1a; - 这部分测试需要46分钟完成&#xff0c;建议准备计算器和纸笔。 - 测试内容涉及问题解决能力、数值计算能力和逻辑推理能力。 -…

Docker-软件容器平台

一、容器 1、什么是容器 容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署 容器镜像是轻量的、可执行的独立软件包 &#xff0c;包含软件运行所需的所有内容&#xff1a;代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于 Linux 和 Windows…

K8s使用nfs

改动点 ip和路径改为自己的 --- apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: nfs-client --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata:nam…

Spring Boot集成Access DB实现数据导入和解析

1.什么是Access DB&#xff1f; microsoft office access是由微软发布的关联式 数据库管理系统。它结合了 microsoft jet database engine 和 图形用户界面两项特点&#xff0c;是一种关系数据库工具。它在很多地方得到广泛使用&#xff0c;例如小型企业&#xff0c;大公司的部…

Linux命令--paste

简介 paste命令用于合并文件行 参数说明 -d: 自定义间隔符&#xff0c;默认为tab -s&#xff1a;串行处理&#xff0c;非并行 示例 将两个文件&#xff0c;按照行合并 demo1.conf内容如下&#xff1a; name domain ip area user password roledemo2.conf内容如下 test t…

Python批量合并多个PDF

安装pymupdf pip install pymupdf合并PDF文件 合并两个PDF 方法Document.insert_pdf()可以在不同的 PDF 文档之间复制页面。示例&#xff08;doc1和doc2是打开的 PDF&#xff09;&#xff1a; # append complete doc2 to the end of doc1 doc1.insert_pdf(doc2)import fitz…

WSL开发--利用Git连接远程仓库(详细步骤)

这篇文章主要介绍了如何将本地项目推送到 GitLab 上&#xff0c;并且避免每次提交都需要输入用户名和密码。文中分步讲解了配置 GitLab SSH 密钥以及配置 Git 远程仓库地址的方法。以下是文章的优化和简洁版&#xff1a; 将本地项目推送到 GitLab 并配置 SSH 免密登录 为了方便…