原文链接:https://www.cnblogs.com/zknublx/p/9090168.html
与原文有细微差别,改了一点小错误
1.环境搭建
通过pip 安装 celery、redis
pip install celery
pip install redis
默认安装celery 最新版是4.0.2
默认安装redis 最新版是2.10.5
另外不要忘记安装redis服务:
# wget http://download.redis.io/releases/redis-3.2.6.tar.gz
# tar -xzf redis-3.2.6.tar.gz
# cd redis-3.2.6
# make
# src/redis-server # 启动redis服务,看清楚,这是在你的redis-3.2.6目录下执行的 # src/redis-cli # 启动客户端
2.编写py
$ vim tasks.py
from celery import Celery
from celery.schedules import crontab
app = Celery('tasks', broker='redis://localhost:6379/0') @app.on_after_configure.connect def setup_periodic_tasks(sender, **kwargs): # Calls test('hello') every 10 seconds. sender.add_periodic_task(10.0, test.s('hello'), name='add every 10') # Calls test('world') every 30 seconds sender.add_periodic_task(30.0, test.s('world'), expires=10) # Executes every Monday morning at 7:30 a.m. sender.add_periodic_task( crontab(hour=7, minute=30, day_of_week=1), test.s('Happy Mondays!'), ) @app.task def test(arg): print(arg)
3.在新命令窗口中启动redis服务
怎么启动?
进入你的redis目录
如果第一步启动redis-server后没有退出则无需此步
$ cd redis-3.2.6
$ src/redis-server
4.在新窗口中启动celery
进入你tasks.py所在目录,执行:
$ celery -A tasks worker --loglevel=info
此时,异步服务已经可用了,但定时任务并没有执行,怎么回事?你还需要再启动另一服务,如下
5.在新窗口中启动beat
还是要进入你tasks.py所在目录,执行:
$ celery -A tasks beat
启动后的样子:
看一下第4步的窗口,是不是有打印输出?good!每隔10秒打印一次hello,每隔30秒打印一次world!
具体你的项目要设置多长时间执行任务,可参见官方文档的参数说明。
附官方文档地址:http://docs.celeryproject.org/en/latest/