我想写一个长期运行的进程(linux守护进程),它有两个目的:
我最初将它作为一个简单的程序运行,它将贯穿运行并执行我随后编写的更新,但现在我已经添加了REST要求,并且还希望更改某些作业的频率,但是而不是其他人(假设所有工作都有不同的频率)。
我有编写长时间运行流程的经验,特别是那些自己做事情而不是回应请求的流程。
我的基本计划是在一个单独的线程/进程中运行REST部分,并认为我将单独运行作业部分。
我想知道是否存在任何模式,特别是python,(我看过并且没有真正找到我想要做的任何示例)或者是否有任何建议从何处开始转换我的项目满足这些新要求。 我已经看到一些涉及日程安排的项目,但我真的在这里寻找真实世界的用户体验/建议。什么有用/不适合你?
答案 0 :(得分:2)
如果REST服务器和预定作业没有任何共同点,请执行两个单独的实现,即REST服务器和作业内容,并将它们作为单独的进程运行。
如前所述,查看作业内容的现有调度程序。我不知道Twisted是否可以替代,但您可能想要查看此平台。
如果,OTOH,REST接口调用与计划作业相同的功能,您应该尝试将它们视为具有相同功能的两个接口,例如像这样:
长期运行,高可用性流程的一个共同特点就是拥有一个额外的“主管”流程,只需检查必要的恶魔是否已启动并运行,并在必要时重新启动它们。
答案 1 :(得分:1)
一种选择是从这个列表中简单地选择一个轻量级WSGI服务器:
让它完成为请求提供服务的长期运行流程。 (我建议Spawning。)您的代码可以专注于REST API并通过定义良好的WSGI接口和调度作业来处理请求。
您可以使用至少几个调度库,但我对它们知之甚少:
答案 2 :(得分:1)
这就是我们所做的。
答案 3 :(得分:0)
我通常使用cron
进行日程安排。至于REST,您可以使用众多的Web框架之一。但是只运行SimpleHTTPServer就足够了。
您可以使用cron
@reboot
@reboot (cd /path/to/my/app && nohup python myserver.py&)
答案 4 :(得分:0)
调度程序的通常设计模式是:
根据您的情况适当调整(例如,有时您可能希望重新安排作业,以便在他们开始运行而不是完成时再次运行。)