Python 芹菜中持久的长时间运行任务

Python 芹菜中持久的长时间运行任务,python,rabbitmq,task,celery,long-running-processes,Python,Rabbitmq,Task,Celery,Long Running Processes,我正在开发一个基于Python的系统,将长时间运行的任务排队给工作人员 这些任务来自生成“令牌”的外部服务,但一旦基于该令牌创建了这些任务,它们就应该持续运行,并且只有在代码明确删除时才会停止。 该任务启动WebSocket并在其上循环。如果套接字已关闭,它将重新打开它。基本上,这项任务不应该得出结论 我设计此解决方案的目标是: 当优雅地重新启动工作程序(例如加载新代码)时,任务应重新添加到队列中,并由某个工作程序拾取 当发生不正常关机时,也应该发生同样的情况 两个工人不应该以同样的方式工作 其

我正在开发一个基于Python的系统,将长时间运行的任务排队给工作人员

这些任务来自生成“令牌”的外部服务,但一旦基于该令牌创建了这些任务,它们就应该持续运行,并且只有在代码明确删除时才会停止。
该任务启动WebSocket并在其上循环。如果套接字已关闭,它将重新打开它。基本上,这项任务不应该得出结论

我设计此解决方案的目标是:

  • 当优雅地重新启动工作程序(例如加载新代码)时,任务应重新添加到队列中,并由某个工作程序拾取
  • 当发生不正常关机时,也应该发生同样的情况
  • 两个工人不应该以同样的方式工作
  • 其他进程可能会创建更多任务,这些任务应定向到处理特定令牌的同一个工作进程。这将通过将这些任务发送到以令牌命名的队列来解决,工作人员应该在启动令牌的任务后开始侦听该队列。我将此需求列为一个解释,解释为什么这里甚至需要任务引擎
  • 独立服务器、快速代码重新加载等—每个任务的停机时间最短
  • 我们所有的服务器端都是Python,看起来芹菜是最好的平台。 我们在这里使用的是正确的技术吗?我们应该考虑的其他建筑选择?

    谢谢你的帮助

    根据

    当启动关机时,工作进程将在其实际终止之前完成所有当前正在执行的任务,因此如果这些任务很重要,您应该等待它完成,然后再执行任何激烈的操作(如发送终止信号)

    如果工作进程在经过深思熟虑的时间后不会关闭,例如因为任务卡在无限循环中,则可以使用KILL信号强制终止工作进程,但要注意当前正在执行的任务将丢失(除非任务设置了acks_late选项)

    通过使用,你可能会得到你想要的东西

    总的来说,我认为您需要实现一些额外的应用程序端作业控制,另外可能还需要一个锁服务


    但是,是的,总的来说,你可以用芹菜来做。是否有更好的技术。。。这超出了本网站的范围。

    我在“进程令牌”任务中使用的
    acks\u late=True,track\u start=True
    。我将在应用程序级别设置保护措施,以确保在同一令牌上不会有两个任务。由于ACK\u延迟和track\u启动,我的流程令牌任务将达到“失败”状态,原因是
    workerLosterError('Worker过早退出:信号15(SIGTERM)。”,
    这还不算太糟,事实上,因为它还在排队。不,我只需要另一个工人来接。