如何从系统故障中恢复关键python作业

如何从系统故障中恢复关键python作业,python,reliability,fault-tolerance,journaling,Python,Reliability,Fault Tolerance,Journaling,是否有任何python库可以提供(通用)作业状态日志记录和恢复功能 以下是我的用例: 接收到用于启动作业的数据 作业开始处理 作业完成处理 然后,如果进程中止/断电,我希望能够在1之后重新启动作业。作业将在作业开始时写入日志文件,并在作业完成时标记作业完成。因此,当进程启动时,它会检查日志文件中是否有未完成的作业,并使用日志数据重新启动未完成的作业(如果存在)。那么有什么python工具可以解决这个问题呢?(或为必须完成的关键作业提供容错和恢复的其他python解决方案)。我知道像RabbitM

是否有任何python库可以提供(通用)作业状态日志记录和恢复功能

以下是我的用例:

  • 接收到用于启动作业的数据
  • 作业开始处理
  • 作业完成处理

  • 然后,如果进程中止/断电,我希望能够在1之后重新启动作业。作业将在作业开始时写入日志文件,并在作业完成时标记作业完成。因此,当进程启动时,它会检查日志文件中是否有未完成的作业,并使用日志数据重新启动未完成的作业(如果存在)。那么有什么python工具可以解决这个问题呢?(或为必须完成的关键作业提供容错和恢复的其他python解决方案)。我知道像RabbitMQ这样的作业队列在这种情况下可以很好地工作,但我想要一个不需要外部服务的解决方案。我没有得到多少。有什么解决办法吗?似乎这方面的库是有用的,因为在使用日志时有很多问题很难正确处理,但库可以处理。(例如多个异步写入、文件拆分和截断等)

    我认为您可以使用crontab或APScheduler来实现这一点,我认为后者具有您需要的所有功能,但即使使用cron,您也可以执行以下操作:

    1:计划进程在特定时间间隔后运行

    2:进程检查是否有正在运行的作业

    3:如果没有作业正在运行,请启动一个作业

    4:作业继续工作,并将状态保存到驱动器/db中

    5:如果失败或完成,步骤3将继续


    很可能是您正在寻找的,它们的功能列表非常广泛,如果不能满足您的要求,它也可以扩展。

    我认为您可以使用crontab或APScheduler来实现这一点,我认为后者具有您所需的所有功能,但即使使用cron,您也可以执行以下操作:

    1:计划进程在特定时间间隔后运行

    2:进程检查是否有正在运行的作业

    3:如果没有作业正在运行,请启动一个作业

    4:作业继续工作,并将状态保存到驱动器/db中

    5:如果失败或完成,步骤3将继续


    很可能是您正在寻找的,它们的功能列表非常广泛,如果不能满足您的要求,它也可以扩展。

    您可以添加一个检查日记账分录的威胁。我们正在做类似的事情,我们称之为恢复逻辑。基本上,我们所有的工作都进入你所谓的“日志”中。有一个单独的线程处理这个目录中的任务/工作。如果任务/作业失败,我们不会将其从目录中删除。我们有一个恢复线程,每“x”秒运行一次,以重新处理任何失败的作业。线程在Python中非常容易,而且您似乎已经有了很多业务规则,所以如果对您的用例可行,我只想添加一些线程。@spyder1329是有意义的,但首先并不能解决写日志和读日志的问题(我将在问题中澄清这一点)。但是在日志记录方面有很多问题,特别是当您可能对一个日志进行多个异步写入时。还有一些事情,比如文件轮换、向右移动的文件数等等。你查看过log4python吗?@spyder1329这是个好主意,使用日志记录器记录日志,因为它们有些相似。。。然而,大多数日志记录器没有一种机制来丢弃特定的已完成日志或根据已完成的作业进行截断。理想情况下,我想使用一个日志库。但是,如果你能举例说明如何使用日志记录器记录数据,那就太棒了!我也很期待看到答案,但我会更信任一个流行且广泛部署的消息服务,而不是一个专门的库。你可以添加一个检查日志条目的威胁。我们正在做类似的事情,我们称之为恢复逻辑。基本上,我们所有的工作都进入你所谓的“日志”中。有一个单独的线程处理这个目录中的任务/工作。如果任务/作业失败,我们不会将其从目录中删除。我们有一个恢复线程,每“x”秒运行一次,以重新处理任何失败的作业。线程在Python中非常容易,而且您似乎已经有了很多业务规则,所以如果对您的用例可行,我只想添加一些线程。@spyder1329是有意义的,但首先并不能解决写日志和读日志的问题(我将在问题中澄清这一点)。但是在日志记录方面有很多问题,特别是当您可能对一个日志进行多个异步写入时。还有一些事情,比如文件轮换、向右移动的文件数等等。你查看过log4python吗?@spyder1329这是个好主意,使用日志记录器记录日志,因为它们有些相似。。。然而,大多数日志记录器没有一种机制来丢弃特定的已完成日志或根据已完成的作业进行截断。理想情况下,我想使用一个日志库。但是,如果你能举例说明如何使用日志记录器记录数据,那就太棒了!我也很期待看到答案,但我会更信任一个流行且广泛部署的消息服务,而不是一个专门的库。我认为这不是一个非常正确的解决方案,因为没有一个解决方案专注于数据存储,这正是我想要的。这些解决方案侧重于运行作业,而这不是本例中的问题。没有处理的是灾难性故障情况下的恢复能力。这就是我想要解决的问题。然而,这确实给了我一个想法。。。SQLite可能是一个很好的解决方案。它处理分页、存储和删除,可能是一个很好的日志文件……基本上,我需要解决的部分主要是4,保存到驱动器中,没有外部服务。这些工具使用其他服务,我不这么认为