windows系统下python进程管理系统

news2024/11/29 0:55:11

两年来,我们项目的爬虫代码大部分都是放在公司的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. 监控当前节点正在运行的python进程,每隔一段时间上报到redis
  2. 接受主节点的请求,对爬虫进程控制【启动/关闭】

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

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

相关文章

如何解决node-sass下载用的还是过期的淘宝源?

下载node-sass发现报错过期的证书 把npm的淘宝源换成最新的https://registry.npmmirror.com后发现还是指向了以前的淘宝源,看到一位博主说,单改npm源不够还要改下载node-sass的源,再次搜索另外一位博主提供了命令npm config ls可以使用它来查…

Http 超文本传输协议基本概念学习摘录

目录 HTTP协议 超文本传输协议 HyperText超文本 HTML超文本标记语言 HTTP协议原理 请求发送 服务器处理 响应发送 连接关闭或保持 HTTP协议版本 HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3 HTTP请求方法 GET POST PUT DELETE HEAD OPTIONS HTTP请求头字…

模拟算法总述

模拟 1.模拟算法介绍 模拟算法通过模拟实际情况来解决问题,一般容易理解但是实现起来比较复杂,有很多需要注意的细节,或者是一些所谓很”麻烦”的东西。 模拟题一般不涉及太难的算法,一般就是由较多的简单但是不好处理的部分组成…

xinference - 大模型分布式推理框架

文章目录 关于 xinference使用1、启动 xinference设置其他参数 2、加载模型3、模型交互 其它报错处理 - transformer.wte.weight 关于 xinference Xorbits Inference(Xinference)是一个性能强大且功能全面的分布式推理框架。 可用于大语言模型&#xff…

【重温设计模式】状态模式及其Java示例

状态模式的基本概念 在编程世界的大海中,各种设计模式就如同灯塔,为我们的代码编写指明方向。其中,状态模式是一种行为设计模式,它让你能在一个对象的内部状态改变时改变其行为,使得对象看起来就像改变了其类一样。这…

Flink中任务(Tasks)和任务槽(Task Slots)详解

Flink中任务(Tasks)和任务槽(Task Slots)详解 任务槽(Task Slots) Flink中每一个worker(也就是TaskManager)都是一个JVM进程,它可以启动多个独立的线程,来并行执行多个子任务&#…

从零开始搭建游戏服务器 第四节 MongoDB引入并实现注册登录

这里写目录标题 前言正文添加依赖安装MongoDB添加MongoDB相关配置创建MongoContext类尝试初始化DB连接实现注册功能测试注册功能实现登录逻辑测试登录流程 结语下节预告 前言 游戏服务器中, 很重要的一点就是如何保存玩家的游戏数据. 当一个服务端架构趋于稳定且功能全面, 开发…

Spring单元测试+Mockito

一,背景 单元测试基本上是开发逃不过的一个工作内容,虽然往往因为过于无聊,或者过于麻烦,而停止于项目的迭代之中,不了了之了。其实不是开发们懒,而是上头要求的测试覆盖率高,但是又没有好用的…

zookeeper快速入门(合集)

zookeeper作为一个分布式协调框架,它的创建就是为了方便或者简化分布式应用的开发。除了服务注册与发现之外,它还能够提供更多的功能,但是对于入门来说,看这一篇就够了。后续会讲zookeeper的架构设计与原理,比如zookee…

MySQL 数据库设计范式

第一范式(1NF) 每一列都是不可分割的原子数据项第二范式(2NF) 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖) 1.函数依赖A->B,如果通过A属性(属性组)的值…

[LeetBook]【学习日记】排序算法——归并排序

主要思想 归并排序是一种分治算法,其排序过程包括分和治分是指将要排序的序列一分为二、二分为四,直到单个序列中只有一个数治是指在分完后,将每两个元素重新组合,四合为二、二合为一,最终完成排序 图片作者&#xf…

python 实现把内层文件夹的文件,复制/剪切到外层文件夹

文章目录 如下图所示,收集了很多省市的文件,结果发现市一级的文件与区县一级的文件混在一起了。 接下来使用代码实现: 根据关键词识别出 市一级的文件;把市一级的文件,移动或者复制到省文件夹下;给出了py…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI…

前端静态开发案例-基于H5C3开发的仿照视频网站的前端静态页面-2 样式表部分和效果展示

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载 charset "utf-8"; /* 程序员田宝宝原创版权所有,仿冒必究,该界面是仿照某视频网站官网开发的静态页面 */ …

【Thread 线程】线程的方法与状态

SueWakeup 个人中心:SueWakeup 系列专栏:学习Java 个性签名:保留赤子之心也许是种幸运吧 本文封面由 凯楠📷 友情赞助播出! 目录 一个线程的生命周期 线程终止的原因 线程的方法 Thread 类的静态方法 1. 设置线程…

linux单机部署hadoop

1.下载安装包 https://archive.apache.org/dist/hadoop/common/ 2.上传压缩 3.修改配置文件 1)设置JDK的路径 cd /usr/local/software/hadoop-3.1.3/etc/hadoop vi hadoop-env.sh export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64/ 查看…

【数据结构和算法初阶(C语言)】二叉树的顺序结构--堆的实现/堆排序/topk问题详解---二叉树学习日记②1

目录 ​编辑 1.二叉树的顺序结构及实现 1.1 二叉树的顺序结构 2 堆的概念及结构 3 堆的实现 3.1堆的代码定义 3.2堆插入数据 3.3打印堆数据 3.4堆的数据的删除 3.5获取根部数据 3.6判断堆是否为空 3.7 堆的销毁 4.建堆以及堆排序 4.1堆排序---是一种选择排序 4.2升序建大堆&a…

微信小程序 canvas层级过高覆盖原生组件

一、背景 微信小程序中使用signature第三方插件完成签名效果&#xff0c;但真机调试时发现canvas层级过高遮挡了按钮 二、具体问题 问题原因&#xff1a;签名后点击按钮无法生效 问题代码&#xff1a; <template><view class"sign_page" v-cloak>&l…

nodejs基于vue超市信息管理系统flask-django-php

互联网的快速发展&#xff0c;使世界各地的各种组织的管理方式发生了根本性的变化&#xff0c;我国政府、企业等组织在上个世纪90年代就已开始考虑使用互联网来管理信息。由于以前的种种因素&#xff0c;比如网络的普及率不高&#xff0c;用户对它的认知度不够&#xff0c;以及…

计算机网络:数据交换方式

计算机网络&#xff1a;数据交换方式 电路交换分组交换报文交换传输对比 本博客介绍计算机之间数据交换的三种方式&#xff0c;分别是电路交换、分组交换以及报文交换。 电路交换 我们首先来看电路交换&#xff0c;在电话问世后不久&#xff0c;人们就发现要让所有的电话机都…