V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wudicgi
V2EX  ›  问与答

有没有这样一种任务队列系统,自己独立运行,配置一下就可以执行有先后顺序的任务,同级任务可以并行执行

  •  
  •   wudicgi · 2021-08-25 13:34:04 +08:00 · 739 次点击
    这是一个创建于 464 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以“下载收藏夹中的所有视频”为例,会有这样几个任务:
    1. 获取收藏夹的列表
    2. 获取收藏夹中视频的列表
    3. 下载视频
    4. 对下载得到的文件进行处理 (合并分段视频等)
    5. 将视频移动到指定位置,并将信息添加到数据库中

    1, 2, 3, 4, 5 按顺序执行,同时期望 1, 2 同一时间最多运行一个任务,3 可以同时运行多个,4, 5 在每个 3 完成后依次运行
    每个任务通过调用程序完成就行,这些程序自己写

    像这种任务队列的需求有没有什么现成的程序可以用?感觉应该有,但这方面了解的少,不知道用什么关键词搜
    8 条回复    2021-08-25 18:25:08 +08:00
    wudicgi
        1
    wudicgi  
    OP
       2021-08-25 13:41:58 +08:00
    这样的工作我以前都是用 PHP 直接写的,每个任务搞个 php 脚本
    纯手动操作,执行完一级的任务,再执行下一级,有没有错误全靠人工判断

    如果有一个通用的任务队列框架可用,可以把数据的输出输出和错误处理都标准化
    而且像下载文件调用 youtube-dl 这种操作,在 PHP 里调用外部程序感觉可控的东西少,有异常时处理不方便
    ss098
        2
    ss098  
       2021-08-25 14:08:15 +08:00
    混合使用 Chain 与 Batch 。

    https://laravel.com/docs/8.x/queues
    wudicgi
        3
    wudicgi  
    OP
       2021-08-25 14:47:06 +08:00
    @ss098 感谢, 看了下 laravel 的 queues, 应该可以实现这种功能,但它貌似是在 PHP 程序内部用的

    现在我理想中的程序是跑外部程序的,每个任务启动起来就是一个进程,
    有一个 Web 页面或客户端程序可以看这些进程的运行状态,加上简单的控制,
    不知道有没有人做过这种程序,就怕自己写完发现早有了
    aborigine
        4
    aborigine  
       2021-08-25 15:03:27 +08:00
    airflow 可以用,哈哈哈哈
    ruiyi1994
        5
    ruiyi1994  
       2021-08-25 15:12:28 +08:00
    lithiumii
        6
    lithiumii  
       2021-08-25 15:24:20 +08:00 via Android
    rq
    triptipstop
        7
    triptipstop  
       2021-08-25 16:13:22 +08:00
    XXLJOB
    wudicgi
        8
    wudicgi  
    OP
       2021-08-25 18:25:08 +08:00
    @aborigine 看了下 airflow 应该是相当接近这个需求了,就是貌似对 Windows 平台不太友好
    有时间时试用一下
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3154 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 10:52 · PVG 18:52 · LAX 02:52 · JFK 05:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.