1. celery的简单使用
#celery结合redis的操作
#coding=utf-8
from docx import Document
# document = Document()
# document.save('test.docx')
# -*- coding:utf8 -*-
import time
from celery import Celery
celery = Celery('tasks', broker='redis://localhost:6379/0')
# 如果有redis密码
# celery = Celery('tasks', broker='redis://:foobared@localhost:6379/0')
@celery.task
def add(x, y):
return x + y
1. 首先打开redis
2. 在当前目录下启动celery
celery -A demo[为文件名] worker --loglevel=info
3. 跟进任务
进入python控制台
>>> from tasks import add
>>> add.delay(2, 5)
<AsyncResult: 4c079d93-fd5f-47f0-8b93-c77a0112eb4e>
这个”delay()”方法会将任务发送到消息中间人队列,并由之前启动的后台职程来执行。所以这时Python控制台上只会返回”AsyncResult”信息。如果你看下之前职程的启动窗口,你会看到多了条日志”Task tasks.add[4c079d93-fd5f-47f0-8b93-c77a0112eb4e] succeeded in 0.0211374238133s: 7″。说明”add”任务已经被调度并执行成功,并且返回7。
4. 关于配置,可看celery操作一节。
5. 关于并发
任务的并发默认采用多进程方式,Celery也支持gevent或者eventlet协程并发。方法是在启动职程时使用”-P”参数:
celery worker -A demo1 --loglevel=info -P gevent -c 100
通过”-P gevent”我们就将并发改为了gevent方式了;”-c 100″同之前介绍的”concurrency”参数,指定了并发个数。对于gevent不熟悉的朋友,可以看看我之前的文章。另外默认多进程方式的参数值是”prefork”。
网友评论