Celery異步分布式
什麼是celery?
他是一個python開發的異步分布式任務排程子產品
celery本身不提供消息服務,使用第三方服務,也就是broker來傳遞任務,目前支援rabbitmq,redis,資料庫等等。
我們使用redis
連接配接URL的格式為:
<code> </code><code>redis:</code><code>/</code><code>/</code><code>:password@hostname:port</code><code>/</code><code>db_number</code>
例如:
<code> </code><code>BROKER_URL</code><code>=</code><code>'redis://localhost:6379/0'</code>
過程如圖示
在python裡面如果用到異步分布式,首先想到celery
安裝celery
<code>pip </code><code>install</code> <code>celery</code>
<code>pip </code><code>install</code> <code>redis </code><code>#之前講過</code>
在伺服器上安裝redis伺服器,并啟動redis
第一個簡單的例子:
<code>[root@localhost celery]</code><code># cat lili.py</code>
<code>#/usr/bin/env python</code>
<code>#-*- coding:utf-8 -*-</code>
<code>from</code> <code>celery </code><code>import</code> <code>Celery</code>
<code>broker</code><code>=</code><code>"redis://192.168.48.131:6379/5"</code>
<code>backend</code><code>=</code><code>"redis://192.168.48.131:6379/6"</code>
<code>app </code><code>=</code> <code>Celery(</code><code>"lili"</code><code>, broker</code><code>=</code><code>broker, backend</code><code>=</code><code>backend)</code>
<code>@app</code><code>.task</code>
<code>def</code> <code>add(x, y):</code>
<code> </code><code>return</code> <code>x</code><code>+</code><code>y</code>
啟動:
<code># celery -A lili worker -l info</code>
調用:
<code># cat demo2.py</code>
<code>#!/usr/bin/python</code>
<code>from</code> <code>lili </code><code>import</code> <code>add</code>
<code>import</code> <code>time</code>
<code>a </code><code>=</code> <code>add.delay(</code><code>10</code><code>, </code><code>20</code><code>)</code>
<code>print</code> <code>(a) </code><code>##傳回異步分布式的對象</code>
<code>print</code> <code>(</code><code>type</code><code>(a))</code>
<code>time.sleep(</code><code>1</code><code>)</code>
<code>print</code> <code>(a.result) </code><code>##傳回調用的值</code>
<code>print</code> <code>(a.status) </code><code>##傳回狀态</code>
<code>print</code> <code>(a.get(timeout</code><code>=</code><code>3</code><code>)) </code><code>##獲得值</code>
<code>print</code> <code>(a.ready()) </code><code>#是否處理,傳回 True 為處理完成</code>
<code></code>
本文轉自 聽丶飛鳥說 51CTO部落格,原文連結:http://blog.51cto.com/286577399/2052240