python 长时间运行的守护进程作业处理器
我想写一个长时间运行的程序(Linux守护进程),它有两个主要功能:
- 响应REST网络请求
- 执行可以安排的任务
最开始,我是把它做成一个简单的程序,运行时进行更新,然后用cron定时执行。但现在我需要增加REST的功能,同时也想改变一些任务的执行频率,而其他任务的频率不变(比如说,每个任务的频率都不一样)。
我对写长时间运行的程序完全没有经验,尤其是那种可以自己执行任务的程序,而不是只响应请求的。
我基本的计划是把REST部分放在一个单独的线程或进程中,然后把任务部分也单独运行。
我想知道有没有什么模式,特别是在Python方面(我查过,但没找到我想要的例子),或者有没有人能给我一些建议,帮我把项目转变成满足这些新需求的方向。我见过一些涉及调度的项目,但我真的想听听大家的真实使用经验和建议。什么方法对你有效,什么又不行呢?
5 个回答
1
一种选择是从这个列表中挑一个轻量级的WSGI服务器:
然后让它来处理那些需要长时间运行的请求。 (我推荐使用Spawning。)这样你的代码就可以专注于REST API和通过清晰的WSGI接口处理请求,以及安排任务。
你可以使用至少几个调度库,但我对它们了解不多:
3
如果REST服务器和定时任务之间没有任何联系,那就分别实现这两部分,REST服务器和任务部分,作为独立的进程运行。
之前提到过,可以看看现有的调度程序来处理任务部分。我不确定Twisted是否是一个替代方案,但你可以考虑一下这个平台。
另一方面,如果REST接口调用的功能和定时任务是一样的,那你应该把它们看作是同一功能的两个接口,比如这样:
- 把实际的任务写成REST服务器可以分叉并运行的程序。
- 有一个单独的调度器来处理任务的时间安排。
- 如果某个任务该运行了,就让调度器向本地服务器发出相应的REST请求。这样调度器只处理任务描述,而不需要知道它们是怎么实现的。
对于长时间运行、高可用性的进程,通常会有一个额外的“监控”进程,它只负责检查必要的服务是否在运行,并在需要时重启它们。