『玩转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

相关推荐

  • Grok Super开通会员代充开通方法

    Grok Super开通会员代充开通方法,整理国内用户用微信支付宝完成Grok Super充值、订阅和代充的操作流程。

    未分类 2026 年 6 月 30 日
    6100
  • 【Java异常处理】Spring框架中Bean创建失败的解决方案剖析

    欢迎语 诚挚欢迎各位技术爱好者来到这个知识分享平台!在这里,我们不仅能交流前沿技术,还能共同探讨开发中的疑难杂症。期待与您携手在编程世界里不断进步! 问题概述 在基于Spring框架的Java应用开发过程中,org.springframework.beans.factory.BeanCreationException是开发者经常遭遇的典型异常。这个异常通常出…

    2025 年 5 月 19 日
    67100
  • 详解:订单履约系统规划

    大家好,我是汤师爷~ 什么是订单履约系统? 订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费者手中。 通过订单履约系统,消费者可以实时了解商品的物流状态和预计送达时间,并可以根据需求选择同城配送、快递或自提等多样化的履约方式。 对商家而言,订单履约系统可以…

    2025 年 1 月 12 日
    70100
  • 华为OD机试E卷 –英文输入法–24年OD统一考试(Java & JS & Python & C & C++)

    文章目录 题目描述 输入描述 输出描述 用例 JS算法源码 Java算法源码 python算法源码 c算法源码 c++算法源码 题目描述 主管期望你来实现英文输入法单词联想功能。需求如下:• 依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,• 如果联想不到,请输出用户输入的单词前缀。 注意: 英文单词联想时,…

    未分类 2025 年 1 月 15 日
    74100
  • ChatGPT Plus代充流程充值开通教程

    搜索 ChatGPT Plus 充值的人,通常不是不会注册账号,而是卡在订阅付款和账号升级上。共享账号看起来简单,但不适合放工作内容和个人资料;海外信用卡、虚拟卡又需要额外维护。本文按国内用户更容易操作的路径,把购买卡密、提交 Session、确认账号到刷新 Plus 状态的步骤重新整理一遍。

    未分类 2026 年 6 月 30 日
    7100

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信