windows系统下python进程管理系统

两年来,我们项目的爬虫代码大部分都是放在公司的windows机器上运行的,原因是服务器太贵,没有那么多资源,而windows主机却有很多用不上。为了合理利用公司资源,降低数据采集成本,我在所以任务机器上使用anaconda安装了python环境,并将代码部署到每台机器上,当有爬虫任务时,我就去每台机器启动相应的爬虫脚本。这样的运行方式一直存在了大约两年,期间也遇到一些问题,如之前使用fastapi写了一个控制服务【master+slave】的方式,但是在启动爬虫的过程中,存在爬虫起不来,或者进程已经存在,但由于没有添加详细的管理控制,导致日志文件冲突等问题。这些问题,我一直有想法去解决,但碍于我本人比较懒,同时对于正常运行的代码不想修改的等原因,导致我一年都没有从根本上解决这个问题。
最近没有什么开发任务,我从2月份过年回来,也一行代码没写。本着不能让自己荒废的原则,我准备重新设计一个系统,用于管理多个工作节点的python脚本,同时掌握每台机器的资源使用情况,实现通过一个主节点对子节点程序进行控制。
下面图片就是现在正在运行的爬虫项目,里面的.bat文件对应每一种爬虫,在windows下只要双击这个文件就可以启动爬虫,关闭对应生成的cmd框就能关闭爬虫,简单粗暴。
原windows爬虫集合脚本

技术选型

【这里的技术选型会随着开发进程不停得更新】

排除gerapy+scrapy

由于我的爬虫代码都不是使用scrapy写的,这里我首先排除gerapy+scrapy的方案,主要原因是每个代码改动过大,而且我们的脚本时效性要求高,修改为scrapy稳定性存疑,加之我也不是使用scrapy的高手,这里直接排除。

k8s+docker

我在开发脚本之初就想使用docker+k8s来部署这个分布式的爬虫系统,但是由于windows环境下docker运行存在一些稳定性问题,同时我没有使用过k8s,可能最后开发完了对于日志管理等方面会出现未知的风险,我暂时排除这个方案。

python服务控制进程方案【选定】

我在一年前就使用fastapi实现过相应的功能,但没有深入到每一个进程,只涉及到主启动脚本。在使用过程中,也存在了一些问题,同时也没有使用日志采集系统监控。由于我有这些经验,我这次选型还是准备做纯python服务控制进程的方案,这次主要是从0开发,维持每一个进程的稳定性,【后期采用日志采集监控系统管理日志】。

python服务控制进程方案

这里我还是准备采用fastapi这个框架来作为主服务,同时使用mongodb作为数据库,redis用于维护进程心跳机制,整个后端我自己来构造,前端打算集成到我们的爬虫管理系统内。
这里我还是采用一主多从的方案,主节点负责控制启停任务,心跳检测,资源调控【监控每台任务机与服务器的内存与io等参数】

主节点开发

为了实现多节点的控制,我将主节点的功能一一列举,并对每个功能模块详细的做出设计,并记录实现方案。

主节点功能列举

  1. 发送启动,暂停请求到子节点,用于控制爬虫的启停
  2. 从redis获取心跳参数,展示每台机器运行的进程详情
  3. 监控服务器的资源

子节点开发

子节点功能列举

  1. 针对原有爬虫进行修改,要求每个爬虫项目只可启动一个进程,并且支持强制关闭
  2. 监控当前节点正在运行的python进程,每隔一段时间上报到redis
  3. 接受主节点的请求,对爬虫进程控制【启动/关闭】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣热门算法题 59. 螺旋矩阵 II,60. 排列序列,61. 旋转链表

59. 螺旋矩阵 II,60. 排列序列,61. 旋转链表,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.21 可通过leetcode所有测试用例。 目录 59. 螺旋矩阵 II 解题思路 完整代码 Java Python 60. 排列序列 …

Linux基础命令[20]-useradd

文章目录 1. useradd 命令说明2. useradd 命令语法3. useradd 命令示例3.1 不加参数3.2 -d(指定家目录)3.3 -g(指定用户组)3.4 -G(指定附属组)3.5 -p(加密密码)3.6 -e(指…

东方博宜 1449. 求满足条件的数的和

东方博宜 1449. 求满足条件的数的和 这道题我苦想了很久&#xff0c;觉得2个及2个以上很难解决&#xff0c;但是后面发现&#xff0c;可以用一个变量记录次数&#xff0c;次数大于等于2就好了。 #include<iostream> using namespace std; int main() {int n ;cin >…

JetPack之DataBinding基础使用

目录 一、简介二、使用2.1 使用环境2.2 xml文件绑定数据2.3 数据绑定的对象2.3.1 object2.3.2 ObseravbleField2.3.3 ObseravbleCollection 2.4 绑定数据 三、应用场景 一、简介 DataBinding是谷歌15年推出的library,DataBinding支持双向绑定&#xff0c;能大大减少绑定app逻辑…

防火墙在解决方案及典型项目中的应用

防火墙在解决方案及典型项目中的应用 防火墙作为基础安全防护产品&#xff0c;在各种解决方案、业务场景中配套应用&#xff0c;本节给出各类方案资料链接方便查阅。 防火墙在华为网络解决方案中的应用 解决方案 文档 主要应用 CloudFabric云数据中心网解决方案 资料专区…

游戏引擎开发公司 Unity 调查:超六成游戏工作室采纳AI助力开发,效率与质量双提升

Unity是一家专注于游戏引擎开发的公司&#xff0c;其开发的Unity引擎被广泛应用于游戏开发领域&#xff0c;为开发者提供了强大的工具来创建高质量的游戏。Unity引擎不仅支持多种平台&#xff0c;而且具有易用性和灵活性&#xff0c;使得开发者能够高效地进行游戏开发。近年来&…

一文速通自监督学习(Self-supervised Learning):教机器自我探索的艺术

一文速通自监督学习&#xff08;Self-supervised Learning&#xff09;&#xff1a;教机器自我探索的艺术 前言自监督学习是什么&#xff1f;自监督学习的魔力常见的自监督学习方法1. 对比学习2. 预测缺失部分3. 旋转识别4. 时间顺序预测 结语 &#x1f308;你好呀&#xff01;…

Springboot 博客_002 项目环境配置

引入相关依赖 mysqlmybatis <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-…

数据库关系运算理论:专门的关系运算概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

德邦物流、京东重货、跨越速运、百世快运同台比价,寄哪个物流最便宜?一目了然

快递物流上门取件综合版的上线确实为许多用户提供了极大的便利。 德邦物流、京东重货、跨越速运、百世快运等作为业内知名的物流公司&#xff0c;其服务质量和运输效率都得到了广大用户的认可。 一键下单的功能更是简化了操作流程&#xff0c;提高了用户体验。 德邦物流&…

【半导体存储】关于NANDFlash的一些小知识

前言 作为一名电子专业的学生&#xff0c;半导体存储显然是绕不过去的一个坎&#xff0c;今天聊一聊关于NandFlash的一些小知识。 这里十分感谢深圳雷龙发展有限公司为博主提供的两片SD NAND的存储芯片&#xff0c;同时也给大家推荐该品牌的相关产品。 一、定义 存储芯…

漫谈微服务网关

一、什么是服务网关 服务网关 路由转发 过滤器 1、路由转发&#xff1a;接收一切外界请求&#xff0c;转发到后端的微服务上去&#xff1b; 2、过滤器&#xff1a;在服务网关中可以完成一系列的横切功能&#xff0c;例如权限校验、限流以及监控等&#xff0c;这些都可以通过…

(Linux 学习十二)文件查找和文件压缩

一.文件查找 which 命令查找 也可以用 whereis find 文件查找&#xff0c;针对文件名 locate 文件查找&#xff0c;依赖数据库alias 别名 alias yyy ls --colorauto -l yyy //相当于别名 查看文件which ls //查找ls 命令位置 whereis vim //也是查找命令locate …

Gitlab介绍

1.什么是Gitlab GitLab是一个流行的版本控制系统平台&#xff0c;主要用于代码托管、测试和部署。 GitLab是基于Git的一个开源项目&#xff0c;它提供了一个用于仓库管理的Web服务。GitLab使用Ruby on Rails构建&#xff0c;并提供了诸如wiki和issue跟踪等功能。它允许用户通…

文献速递:基于SAM的医学图像分割---医疗 SAM 适配器:适配用于医学图像分割的 Segment Anything 模型

Title 题目 Medical SAM Adapter: Adapting Segment Anything Model for Medical Image Segmentation 医疗 SAM 适配器&#xff1a;适配用于医学图像分割的 Segment Anything 模型 01 文献速递介绍 最近&#xff0c;Segmentation Anything 模型&#xff08;SAM&#xff09;…

Tuxera NTFS使用教程:关于Tuxera NTFS mac还有你不知道的用法

NTFS for Mac是Mac电脑里非常重要的工具之一&#xff0c;因为它太实用了&#xff0c;解决了NTFS移动硬盘在Mac上的写入问题。但是&#xff0c;小伙伴在安装完软件之后&#xff0c;通常再也不会关注它&#xff0c;甚至时间长了&#xff0c;也就忘了Mac里还有这么一个软件。 在T…

​2024年保护微服务的前10种技术

1*5rY-jEv7qlpa_swi4WMIBw.png 引言 与当前正在使用的任何其他技术或方法一样&#xff0c;微服务也有其自己的一套缺陷和问题。尽管如此&#xff0c;微服务架构的采用率不断增加&#xff0c;预计到2028年将达到1718.2亿美元。 然而&#xff0c;尽管团队使用微服务&#xff0c;但…

RabbitMQ的使用—实战

RabbitMQ的使用—实战 ​ RabbitMQ是一个开源的消息代理中间件&#xff0c;在分布式系统开发中被广泛应用。它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;提供可靠的消息传递、灵活的路由、消息确认等功能。下面是使用RabbitMQ的基本流程&#xff1a; 安…

动态QCA|一条通向动态QCA产出的道路2.0

一、《A General Approach to Panel Data Set-Theoretic Research 》阅读 摘要&#xff1a;基于一般线性统计模型的学术研究正迅速向纵向和面板数据计量经济学方法的更广泛和更丰富的应用方向发展。相比之下&#xff0c;集合论的实证研究&#xff0c;尽管其日益普及&#xff0c…

GraalVM详细安装及打包springboot、java、javafx使用教程(打包javafx项目篇)

前言 在当前多元化开发环境下&#xff0c;Java作为一种广泛应用的编程语言&#xff0c;其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱&#xff0c;而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…