V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
amon
V2EX  ›  Python

2024 年 Python 实现定时任务和延时任务,性价比较高的方案是什么?

  •  
  •   amon ·
    xumeng · 2024-07-15 10:41:01 +08:00 · 10741 次点击
    这是一个创建于 382 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要实现多任务的工作流程,支持定时任务、延时任务,能上生产环境,不是玩具。

    谢谢各位。

    57 条回复    2024-09-11 14:23:02 +08:00
    shimada666
        1
    shimada666  
       2024-07-15 10:50:15 +08:00   ❤️ 1
    xxljob 。延时任务原生没有,但是你可能可以参考这篇 https://blog.csdn.net/renkeyutian/article/details/131702203
    Lycnir
        2
    Lycnir  
       2024-07-15 10:57:15 +08:00   ❤️ 1
    masterclock
        3
    masterclock  
       2024-07-15 11:00:27 +08:00   ❤️ 1
    temporal
    nulIptr
        4
    nulIptr  
       2024-07-15 11:03:39 +08:00   ❤️ 1
    简单点也可以普通脚本配合 K8S 的 cornjob 。。。
    saxonblue17
        5
    saxonblue17  
       2024-07-15 11:06:29 +08:00
    同问题,Go 有吗?
    SbloodyS
        6
    SbloodyS  
       2024-07-15 11:07:08 +08:00   ❤️ 1
    python 直接上 airflow
    changdig
        7
    changdig  
       2024-07-15 11:10:51 +08:00
    celery
    paopjian
        8
    paopjian  
       2024-07-15 11:12:12 +08:00
    面试考了 celery,那企业应该是用过了
    amon
        9
    amon  
    OP
       2024-07-15 11:12:56 +08:00
    @shimada666 之前在 Java 中用过,刚去 xxl-job 官方 GitHub 仓库貌似对 Python 支持有限啊。

    @Lycnir 谢谢推荐,这个能简单介绍一下吗,门外汉了解起来感觉都差不多。

    @masterclock 这个看起来挺不错的,不知道会不会太重了。

    @nulIptr 小项目,不用 K8s 的方案有没有。

    @SbloodyS 谢谢推荐。
    whoosy
        10
    whoosy  
       2024-07-15 11:16:23 +08:00   ❤️ 1
    python 也就 celery 和 apscheduler 能用
    julyclyde
        11
    julyclyde  
       2024-07-15 11:17:35 +08:00
    @nulIptr 先把 cron 四个字写对吧
    elron
        12
    elron  
       2024-07-15 11:21:37 +08:00
    celery 和 apscheduler 都能满足,而且 apscheduler 支持动态添加周期任务,celery 更偏向生产-消费模型
    yangfan1999
        13
    yangfan1999  
       2024-07-15 11:22:08 +08:00
    apscheduler +1
    BBCCBB
        14
    BBCCBB  
       2024-07-15 11:25:11 +08:00
    支持延迟消息的 MQ,
    redis zset 也可以实现..
    knva
        15
    knva  
       2024-07-15 11:25:35 +08:00
    一看到这种就想用青龙 ,怎么回事
    rationa1cuzz
        16
    rationa1cuzz  
       2024-07-15 11:30:19 +08:00
    celery 和 apscheduler celery 相对稳定,建议搭配 rabbitmq 使用,apscheduler 适合简单场景,要额外处理多进程并发问题,实际使用起来或多或少都有一些问题
    Masterlxj
        17
    Masterlxj  
       2024-07-15 11:33:19 +08:00
    mq ,方便好用
    swim2sun
        18
    swim2sun  
       2024-07-15 11:35:56 +08:00
    生产级别+python 能想到的只有 airflow ,但性价比不高,需要部署 N 个服务

    不过你既要生产级别的稳定高可用,又要性价比高,感觉比较难,看你自己怎么权衡
    fds
        19
    fds  
       2024-07-15 12:59:43 +08:00
    工作流的话其实还有一个 https://github.com/spotify/luigi 。我们生产环境在用。不过需要外部定期触发。
    masterclock
        20
    masterclock  
       2024-07-15 13:37:01 +08:00
    @amon 一个 go 的主程序一个数据库,应该也不算重
    Davic1
        22
    Davic1  
       2024-07-15 13:39:19 +08:00
    itskingname
        23
    itskingname  
       2024-07-15 14:20:30 +08:00
    @SbloodyS airflow 太蠢了,我的代码只有 2 行,但是为了写这个 dag ,需要搞十多行代码。
    raycool
        24
    raycool  
       2024-07-15 15:33:28 +08:00
    apscheduler +1
    稳的很
    KIDJourney
        25
    KIDJourney  
       2024-07-15 15:35:55 +08:00
    性价比最高的方案就 while True 了
    orioleq
        26
    orioleq  
       2024-07-15 15:38:52 +08:00 via iPhone
    airflow+1
    fred649
        27
    fred649  
       2024-07-15 15:46:41 +08:00 via Android
    如果是 Django 的话可以试试过时的 Django Q ,蛮好用的
    enrolls
        28
    enrolls  
       2024-07-15 16:10:03 +08:00
    所以,多少人天,写个 python 版或者 go 版本的也不困难 :)
    yinmin
        29
    yinmin  
       2024-07-15 16:14:34 +08:00
    大项目用 mq ,小项目用 asyncio.create_task 跑一个 task:

    while True:
    try:
    await asyncio.sleep(1) # Check every 1 second
    ...
    ...
    except asyncio.CancelledError:
    log("Cleanup task cancelled")
    break
    except Exception as e:
    log(f"Error in cleanup task: {e}", "ERROR")
    R4rvZ6agNVWr56V0
        30
    R4rvZ6agNVWr56V0  
       2024-07-15 16:15:53 +08:00
    dramatiq 了解一下
    lanlanye
        31
    lanlanye  
       2024-07-15 16:24:52 +08:00 via iPhone
    微:asyncio
    中小:Celery
    大:Temporal
    Martens
        32
    Martens  
       2024-07-15 16:56:47 +08:00
    蹲一个 go 的
    ETCartman
        33
    ETCartman  
       2024-07-15 19:02:41 +08:00
    shuimugan
        34
    shuimugan  
       2024-07-15 19:03:57 +08:00   ❤️ 1
    其实性价比最高的定时器,应该是各个云厂商的 serverless ,配个触发器,然后选个 curl 镜像,里面扔个 curl 命令请求你的系统,请求头搞个 token 做鉴权就够了。
    优先赛博菩萨 cloudflare
    https://developers.cloudflare.com/workers/examples/multiple-cron-triggers/


    其次国内云
    https://help.aliyun.com/zh/functioncompute/user-guide/time-triggers
    https://cloud.tencent.com/document/product/583/9708


    人家云服务的后台有账户管理、日志记录、失败可以重试、有告警,以前的那种额度够你免费用一年,现在一年也就十几二十块,比你自己搭建部署整天修漏洞打补丁还要搞多节点做高可用靠谱多了。

    你还要做性价比高的延时任务?计算好触发时间,动态创建/修改/删除函数,把触发器时间设定为触发时间就行了,反正小系统也没多少条任务吧。
    Lattez
        35
    Lattez  
       2024-07-15 19:09:58 +08:00
    部署 dolphinscheduler
    shijingshijing
        36
    shijingshijing  
       2024-07-15 19:47:14 +08:00
    @SbloodyS 推荐 airflow 是认真的吗?这玩意儿一上来风扇直接起飞,不差钱服务器资源管够做做 ETL 还不错,生产环境做业务实时处理不被老板骂死也被用户投诉死吧。
    bronyakaka
        37
    bronyakaka  
       2024-07-15 20:28:22 +08:00
    Django-Q ,我已经用上了,好用不好用 谁用谁知道
    chunhai
        38
    chunhai  
       2024-07-15 21:39:46 +08:00
    crontab
    jgarrick
        39
    jgarrick  
       2024-07-15 21:58:40 +08:00
    apscheduler 多线程处理经常有问题.

    既然都推荐 Celery, 我来推荐使用 Huey
    DinoStray
        40
    DinoStray  
       2024-07-15 22:25:22 +08:00
    sleep 有哪些缺陷呢?
    ClericPy
        41
    ClericPy  
       2024-07-15 23:06:26 +08:00
    azkaban/airflow, 只要有多任务依赖关系或者定时任务的,一定要上靠谱的,不然真脚本地狱

    有条件的 Serverless + 自带调度器(比如 steps 或触发器或 gateway api )也挺好,很多运维的事比开发都麻烦

    (虽然在写玩具准备接管一个类似 supervisor 的场景)
    HashV2
        42
    HashV2  
       2024-07-16 09:12:56 +08:00
    我只用过 celery ,参数很多,文档要仔细看,不然在生产环境偶尔还是要出问题的。

    另外如果你是用 django 的话,django5.0 在开发 django-tasks, 目前还是在开发阶段,稍微再等等应该就可以用了
    6167
        43
    6167  
       2024-07-16 09:35:12 +08:00
    celery+redis+rabbitmq ,定时和异步任务都用这个
    atpex
        44
    atpex  
       2024-07-16 10:27:23 +08:00
    @julyclyde 肯定是 porn 打多了:p
    flmn
        45
    flmn  
       2024-07-16 10:36:46 +08:00
    python 不是该先试试 Celery 么
    shimada666
        46
    shimada666  
       2024-07-16 11:22:44 +08:00
    @amon 还行吧,目前我们服务 xxl-job 配合 pyxxl 这个 python 接入库在跑,额外配了个钉钉告警,挺稳的调试也方便
    shimada666
        47
    shimada666  
       2024-07-16 11:27:17 +08:00   ❤️ 1
    技术选型的时候,其他的 airflow 什么都调研了一遍,最后还是选择 xxl-job ,部署简单,资源占用少,该有的功能(秒级定时、cron 表达式可视化编辑、日志查看、支持任务依赖、任务超时等配置)都有,上手/运维难度极低,如果你想省心,推荐这个
    galileo1214
        48
    galileo1214  
       2024-07-16 13:36:14 +08:00
    没有一个人用 crontab 吗
    clemente
        49
    clemente  
       2024-07-16 13:49:35 +08:00
    jenkins job
    pollux
        50
    pollux  
       2024-07-16 15:42:37 +08:00
    我推荐使用 https://faststream.airt.ai/latest/ faststream + NATS
    julyclyde
        51
    julyclyde  
       2024-07-16 16:32:25 +08:00
    @atpex 我还以为是打字速度太快导致的键盘混乱呢
    julyclyde
        52
    julyclyde  
       2024-07-16 16:33:01 +08:00
    @galileo1214 正常人不会用 crontab 的
    因为你不能保证 crond 一直在运行
    drymonfidelia
        53
    drymonfidelia  
       2024-07-17 03:02:26 +08:00 via iPhone
    @shuimugan cf 这个有漏任务的概率(确定不是网络问题)
    Latin
        54
    Latin  
       2024-07-19 09:51:25 +08:00
    walker001
        55
    walker001  
       2024-07-21 15:40:44 +08:00
    @drymonfidelia 有具体的案例看看么
    byronwind
        56
    byronwind  
       2024-07-26 17:09:20 +08:00
    airflow / celery
    gmyxds
        57
    gmyxds  
       324 天前
    我觉得基于 redis 的 zset 很好用,
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2212 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:28 · PVG 08:28 · LAX 17:28 · JFK 20:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.