Celery
Celery (芹菜)是基于Python開發(fā)的分布式任務(wù)隊列襟齿。它支持使用任務(wù)隊列的方式在分布的機器/進程/線程上執(zhí)行任務(wù)調(diào)度。
Celery架構(gòu)
Celery的架構(gòu)由三部分組成巡扇,消息中間件(message broker),任務(wù)執(zhí)行單元(worker)和任務(wù)執(zhí)行結(jié)果存儲(task result store)組成棵磷。
消息中間件: Celery本身不提供消息服務(wù)风秤,但是可以方便的和第三方提供的消息中間件集成。包括拆融,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ
任務(wù)執(zhí)行單元 :Worker是Celery提供的任務(wù)執(zhí)行的單元蠢琳,worker并發(fā)的運行在分布式的系統(tǒng)節(jié)點中啊终。
任務(wù)結(jié)果存儲 :Task result store用來存儲Worker執(zhí)行的任務(wù)的結(jié)果镜豹,Celery支持以不同方式存儲任務(wù)的結(jié)果傲须,包括AMQP, Redis,memcached, MongoDB趟脂,SQLAlchemy, Django ORM泰讽,Apache Cassandra, IronCache 另外, Celery還支持不同的并發(fā)和序列化的手段昔期。
并發(fā) :Prefork, Eventlet, gevent, threads/single threaded
序列化 :pickle, json, yaml, msgpack. zlib, bzip2 compression已卸, Cryptographic message signing 等等
安裝
pip install celery
選擇消息中間件(Broker)
消息中間件有多種選擇,本文使用redis硼一。其他的消息中間件的使用方法參考官方文檔累澡。
redis的配置形式如下
redis://:password@hostname:port/db_number
例如:
BROKER_URL = 'redis://localhost:6379/0'
應(yīng)用
創(chuàng)建一個應(yīng)用,broker使用redis:
使用命令:
$ celery -A tasks worker --loglevel=info
對于celery的命令可以查看celery --help
以及 celery worker --help
執(zhí)行結(jié)果:
發(fā)送一個任務(wù):
執(zhí)行結(jié)果:
保存結(jié)果
如果需要保存結(jié)果的話般贼,需要給celery配置一個backend愧哟。
執(zhí)行:
Django使用celery
使用的是django-celery包:
pip install django-djcelery
配置djcelery
下面是djcelery的有關(guān)配置,定義在Django項目的settings模塊內(nèi)哼蛆。
首先INSTALLED_APPS之中需要寫入djcelery蕊梧。
說明:直接使用django做broker生產(chǎn)環(huán)境不建議,建議使用redis或者rabbitMQ
需要在settings.py之中載入celery的配置腮介。
配置好了celery之后需要創(chuàng)建Celery所需要的數(shù)據(jù)表(django1.7)
python manage.py migrate