『玩转Streamlit』–集成定时任务

学习了Streamlit了之后,可以尝试给自己的命令行小工具加一个简单的界面。

本篇总结了我改造自己的数据采集的工具时的一些经验。

1. 概要

与常规的程序相比,数据采集任务的特点很明显,比如它一般都是I/O密集型程序,涉及大量网络请求或文件读写,耗费的时间比较长;而且往往是按照一定的时间间隔周期性地执行。

这样的程序对交互性要求不高,所以我之前都是用命令行的方式来实现的。

命令行虽然完成采集的任务没有问题,但是采集程序多了之后,管理起来不太方便,

比如,需要查看某个采集程序的配置,或是查看采集程序的状态时,需要登录服务器的命令行页面去查看。

于是,自然就想到使用Streamlit来构造一个简单的界面,本来采集程序也是用Python编写的,

Streamlit集成非常方便。

下面主要使用Streamlit完成以下功能:

  1. 启动定时任务
  2. 停止定时任务
  3. 查看任务状态

2. 实现示例

数据集采集任务都是耗时比较长的,在命令行中无所谓,把定时任务放在一个无限循环中,

不断的去执行就行了。停止采集只要中断命令行(比如Ctrl+C)就行。

但是,在Streamlit中,不能被采集任务阻塞住页面,所以要用多线程或多进程的方式来启动。

因为不同的采集程序是独立的,所以下面的示例采用多进程的方式。

同时,通过Streamlitsession_state来存储采集程序的状态,从而实现控制采集程序启停的功能。

大致的结构如下:

『玩转Streamlit』--集成定时任务

具体代码如下,其中的采集程序是模拟的,主要是为了展示如何通过Streamlit App来控制其他任务的执行。

```python
import streamlit as st
import pandas as pd
import multiprocessing
import time

if "status01" not in st.session_state:
    st.session_state.status01 = False

if "status02" not in st.session_state:
    st.session_state.status02 = False


def spider01():
    """模拟数据采集01"""
    while True:
        print("数据采集01...")
        time.sleep(3)


def spider02():
    """模拟数据采集02"""
    while True:
        print("数据采集02...")
        time.sleep(3)


st.title("采集管理")

spider_data = pd.DataFrame(
    {
        "ID": [1, 2],
        "名称": ["采集01", "采集02"],
        "状态": [False, False],
    }
)

spiders = st.data_editor(
    spider_data,
    width=500,
    num_rows="dynamic",
    disabled=["ID", "名称"],
)

status01 = spiders.iloc[0, 2]
status02 = spiders.iloc[1, 2]

if status01 != st.session_state.status01:
    if status01:  # 启动
        print("启动采集01")
        spider01_proc = multiprocessing.Process(target=spider01)
        spider01_proc.daemon = True
        spider01_proc.start()
        st.session_state.proc01 = spider01_proc
    else:
        print("停止采集01")
        st.session_state.proc01.terminate()
        st.session_state.proc01.join()

    st.session_state.status01 = status01

if status02 != st.session_state.status02:
    if status02:  # 启动
        print("启动采集02")
        spider02_proc = multiprocessing.Process(target=spider02)
        spider02_proc.daemon = True
        spider02_proc.start()
        st.session_state.proc02 = spider02_proc
    else:
        print("停止采集02")
        st.session_state.proc02.terminate()
        st.session_state.proc02.join()

    st.session_state.status02 = status02
```

『玩转Streamlit』--集成定时任务

通过勾选状态 列的Checkbox来控制采集程序的启停,运行的日志如下:

```python
$  streamlit run .app.py

  You can now view your Streamlit app in your browser.

  Local URL: http://localhost:8501
  Network URL: http://192.168.0.6:8501

启动采集01
数据采集01...
数据采集01...
启动采集02
数据采集01...
数据采集02...
数据采集01...
数据采集02...
数据采集01...
数据采集02...
停止采集02
数据采集01...
停止采集01
```

3. 总结

通过Streamlit,可以快速的提供一个简单易用的数据采集控制界面。

上面使用sesstion来管理状态其实不太合理(重新打开浏览器session会丢失),使用sqlite之类的持久存储来保存更好。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/5723.html

(0)
LomuLomu
上一篇 2025 年 1 月 11 日 上午4:21
下一篇 2025 年 1 月 11 日 上午5:22

相关推荐

  • manim边做边学–动画组合

    动画组合类的作用是将多个动画组合起来,以实现更复杂的动画效果。 Manim中有4个 用于动画组合的类: AnimationGroup:将多个动画组合在一起同时播放,能一次性呈现多个对象的不同变化 LaggedStart:按照添加顺序依次启动多个动画,每个动画间有延迟,使动画呈现出清晰的先后顺序 LaggedStartMap:对一组对象应用相同动画,并按顺序逐…

    2025 年 1 月 10 日
    64400
  • JavaScript获取URL参数常见的4种方法

    🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养🥰 📝 专 栏:JavaScript深入研究 🎉 🌈 创作不易,如果能帮助到带大家,欢迎 收藏+关注 哦💕 在前端开发中,处理URL参数是一个常见的任务,尤其是在没有框架支持的情况…

    2025 年 1 月 6 日
    50300
  • MySQL高可用架构:打造数据库的”全天候守护系统”

    MySQL高可用架构:打造数据库的”全天候守护系统” 🌐🛡️ 如同现代化城市离不开持续运转的电力网络和应急响应体系,当代应用系统同样需要具备”零中断”特性的数据库支撑…本文将带您深入MySQL的”高可靠”技术领域,揭秘如何为数据存储构建完善的”不间断运行”机制! 高可用性概念解析 🔍 MySQL高可用性代表着一整套系统设计原则与工程技术,其核心目标是保障…

    2025 年 5 月 12 日
    35000
  • ChatGPT-Plus共享账号,全网最高性价比!

    系统界面展示,原汁原味的官方ChatGPT-Plus! 这可能不是我用过最便宜的ChatGPT共享账号,但绝对是性价比最高,用起来最稳定的平台,没有之一! 我们有专业的技术团队,已经稳定运营一年之久。我们的维护成本很大,基本大家下单的钱都用于账号购买和技术升级,基本没有多少的利润,只为给大家提供一个安全/稳定的GPT服务。如果网站体验好,请帮我们宣传,足够的…

    2024 年 7 月 10 日
    3.8K00
  • chrome浏览器network如何查看上一个页面的请求

    前言 大家好,我是小徐啊。chrome浏览器是我们在JAVA开发中常用的浏览器,其中的console和network等,都是我们常用的功能。network中,是可以看到每次的请求的,包括请求的参数和返回的数据。但有时候,页面上请求之后,会有跳转的请求,导致看不到上一个页面的请求。其实,我们可以设置的,那么,该如何设置呢? 如何设置 首先,打开network的…

    2025 年 1 月 1 日
    63000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信