python | 定时异步调度系统的实现

2018-01-22  本文已影响125人  君子月满楼

说起异步调度系统,大家肯定第一时间想到celery,但是celery是一个重量级的模块,当我们只想异步调度,没有其他需求的时候,完全可以自己实现一个异步调度系统。

那么如何实现自己的异步调度系统呢?

1.实现自己的消息队列
2.任务提交模块

  1. 任务调度处理模块
    4.结果提取模块
    5.如果是定时任务,还可以实现一个定时提交模块

消息队列:
可以使用Kafka、redis、也可以自己实现是一个存放任务的队列,队列里一般传入函数名,参数。

任务提交模块:
将任务相关信息传入消息队列。
任务相关信息通常可以有:

  1. 函数名
    2.参数
  2. 正常完成的回调函数
  3. 异常完成的回调函数

结果调度模块:
需要考虑的事情:
1)如果要实现多个工作者处理任务,那么工作者是选择线程、还是子进程比较好?
个人想法:如果是i/o密集型任务,选择线程即可;如果是计算型任务,选择进程。如果选择进程实现工作者,还是要考虑工作者管理者模块进程是否需要成为守护进程。

2)调度方案
每个任务是那个哪个工作者空闲就哪个工作者处理,还是指定工作者。(笔者选择的是最简单的调度方案)

3)任务的结果处理
如果任务执行异常,需要什么操作。
如果任务执行正常,结果需要写在哪里?

定时模块
这篇文章写的比较清楚,可以参考这篇文章
https://www.cnblogs.com/LinTeX9527/p/6181523.html

上一篇下一篇

猜你喜欢

热点阅读