推荐学习书目
› 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 · Jul 15, 2024 · 17339 views
    This topic created in 843 days ago, the information mentioned may be changed or developed.

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

    谢谢各位。

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

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

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

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

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

    不过你既要生产级别的稳定高可用,又要性价比高,感觉比较难,看你自己怎么权衡
    fds
    fds
    Jul 15, 2024
    19
    工作流的话其实还有一个 https://github.com/spotify/luigi 。我们生产环境在用。不过需要外部定期触发。
    masterclock
    masterclock
    Jul 15, 2024
    20
    @amon 一个 go 的主程序一个数据库,应该也不算重
    itskingname
    itskingname
    Jul 15, 2024
    23
    @SbloodyS airflow 太蠢了,我的代码只有 2 行,但是为了写这个 dag ,需要搞十多行代码。
    raycool
    raycool
    Jul 15, 2024
    24
    apscheduler +1
    稳的很
    KIDJourney
    KIDJourney
    Jul 15, 2024
    25
    性价比最高的方案就 while True 了
    orioleq
    orioleq
    Jul 15, 2024 via iPhone
    26
    airflow+1
    fred649
    fred649
    Jul 15, 2024 via Android
    27
    如果是 Django 的话可以试试过时的 Django Q ,蛮好用的
    enrolls
    enrolls
    Jul 15, 2024
    28
    所以,多少人天,写个 python 版或者 go 版本的也不困难 :)
    yinmin
    yinmin
    Jul 15, 2024
    29
    大项目用 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
    R4rvZ6agNVWr56V0
    Jul 15, 2024
    30
    dramatiq 了解一下
    lanlanye
    lanlanye
    Jul 15, 2024 via iPhone
    31
    微:asyncio
    中小:Celery
    大:Temporal
    Martens
    Martens
    Jul 15, 2024
    32
    蹲一个 go 的
    ETCartman
    ETCartman
    Jul 15, 2024
    33
    slowgen
    slowgen
    PRO
    Jul 15, 2024❤️1
    34
    其实性价比最高的定时器,应该是各个云厂商的 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
    Lattez
    Jul 15, 2024
    35
    部署 dolphinscheduler
    shijingshijing
    shijingshijing
    Jul 15, 2024
    36
    @SbloodyS 推荐 airflow 是认真的吗?这玩意儿一上来风扇直接起飞,不差钱服务器资源管够做做 ETL 还不错,生产环境做业务实时处理不被老板骂死也被用户投诉死吧。
    bronyakaka
    bronyakaka
    Jul 15, 2024
    37
    Django-Q ,我已经用上了,好用不好用 谁用谁知道
    chunhai
    chunhai
    Jul 15, 2024
    38
    crontab
    jgarrick
    jgarrick
    Jul 15, 2024
    39
    apscheduler 多线程处理经常有问题.

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

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

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

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