Celery (芹菜)是基于Python開發的分布式任務隊列。它支持使用任務隊列的方式在分布的機器/進程/線程上執行任務調度。
架構設計

Celery的架構由三部分組成,消息中間件(message broker),任務執行單元(worker)和任務執行結果存儲(task result store)組成。
1. 消息中間件
Celery本身不提供消息服務,但是可以方便的和第三方提供的消息中間件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ
2.任務執行單元
Worker是Celery提供的任務執行的單元,worker并發的運行在分布式的系統節點中。
3.任務結果存儲
Task result store用來存儲Worker執行的任務的結果,Celery支持以不同方式存儲任務的結果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache
另外, Celery還支持不同的并發和序列化的手段
1.并發
Prefork, Eventlet, gevent, threads/single threaded
2.序列化
pickle, json, yaml, msgpack. zlib, bzip2 compression, Cryptographic message signing 等等
安裝和運行
Celery的安裝過程略為復雜,下面的安裝過程是基于我的AWS EC2的Linux版本的安裝過程,不同的系統安裝過程可能會有差異。大家可以參考官方文檔。
首先我選擇RabbitMQ作為消息中間件,所以要先安裝RabbitMQ。作為安裝準備,先更新YUM。
sudo yum -y update
RabbitMQ是基于erlang的,所以先安裝erlang
# Add and enable relevant application repositories:
# Note: We are also enabling third party remi package repositories.
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
# Finally, download and install Erlang:
yum install -y erlang
然后安裝RabbitMQ
# Download the latest RabbitMQ package using wget:wget # Add the necessary keys for verification:rpm --import # Install the .RPM package using YUM:yum install rabbitmq-server-3.2.2-1.noarch.rpm
啟動RabbitMQ服務
rabbitmq-server startRabbitMQ服務已經準備好了,然后安裝Celery, 假定你使用pip來管理你的python安裝包
pip install Celery
新聞熱點
疑難解答