简易版celery的实现
最近学习了下,celery源码,看了一点点皮毛后,自己动手写了个简易的celery,通过redis作为broker,没有复杂的路由匹配规则,队列和任务之间一个直接匹配的简易规则。这里对项目简单的记录下。
项目目录结构
接下来挨个介绍下这几个文件:
- simple 是celery类所在位置,具体实现了celery的启动,加载配置文件,任务装饰器;
- utils 下base是任务类的实现,任务的发布方法,任务绑定celery实例方法;
- redisbase 是连接redis数据的类,主要是往队列里插入数据;
- example 是我自己写的用例
Celery类
# -*- coding: utf-8 -*-
'''
simplecelery @2019 03 26
author xuxiaolong
redis 作为broker
redis 作为结果返回result_backend
'''
from time import sleep
from utils.base import BaseTask
import json
import multiprocessing
from importlib import import_module
from utils.redisbase import RedisHelper
class Celery(object):
def __init__(self, name):
self.name = name
self.queuedic = dict()
self._task = dict()
def start(self):
'''
启动方法
从redis list 中获取message ,并找到对应的任务实例去执行,通过调用task.runtask()方法执行
'''
#_redis = RedisHelper(self.host,self.port,self.db,self.password