celery queue

1、vi tasks.py

#coding:utf-8
from server import app
import random,string,smtplib
@app.task
def add(x,y):
    return x+y
@app.task
def send_mail():
        SUBJECT="臨時登錄密碼"
        HOST="smtp.163.com"
        # TO=passwords['config']['email']
        TO='[email protected]'
        FROM="[email protected]"
        text=str(random.randint(1000,9999))
        BODY=string.join((

        "From:%s"%FROM,

        "To:%s"%TO,

        "Subject:%s"%SUBJECT,

        "",text),"\r\n")

        server=smtplib.SMTP(HOST)

        server.login("[email protected]","第三方發送驗證碼")

        server.sendmail(FROM,[TO],BODY)
        server.quit()

2、vi setting.py

#coding:utf-8
from datetime import timedelta
from kombu import Exchange, Queue
BROKER_URL = 'redis://127.0.0.1:6379/13'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/14'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERY_ENABLE_UTC = True
CELERY_TASK_SERIALIZER = 'json' # 任務序列化和反序列化使用msgpack方案

CELERY_RESULT_SERIALIZER = 'json' # 讀取任務結果一般性能要求不高,所以使用了可讀性更好的JSON

# CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任務過期時間,不建議直接寫86400,應該讓這樣的magic數字表述更明顯

CELERY_ACCEPT_CONTENT = ['json'] # 指定接受的內容類型

CELERY_QUEUES = (
    Queue('default', Exchange('default'), routing_key='default'),
    Queue('for_add', Exchange('for_task_add'), routing_key='for_task_add'),
    Queue('for_send_email', Exchange('for_task_email'), routing_key='for_task_email'),
)
CELERY_ROUTES = {
    'celery_test.tasks.add': {'queue': 'for_add', 'routing_key': 'for_task_add'},
    'celery_test.tasks.send_mail': {'queue': 'for_send_email', 'routing_key': 'for_task_email'},
}
CELERYBEAT_SCHEDULE = {

    'send_mail': {

        'task': 'celery_test.tasks.send_mail',

        'schedule': timedelta(seconds=30),

    }   ,
    'add': {

        'task': 'celery_test.tasks.add',

        'schedule': timedelta(seconds=10),
        'args':(16,16)

    }
}

3、vi server.py

from  celery import Celery
app=Celery('celery_test',include=['celery_test.tasks'])
app.config_from_object('celery_test.setting')

if __name__=='__main__':
    app.start()

4、啓動

 celery -A celery_test.server worker -l info -Q for_send_email

 celery -A celery_test.server worker -l info -Q for_add

 celery -A celery_test.server beat

5、通過flower監控

pip install flower
celery flower --port=5555 --broker=redis://localhost:6379/0

6、訪問

127.0.0.1:5555

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章