描述
為提高**效能,很多耗時,但不影響頁面正常的操作,可丟給訊息佇列非同步執行
「」「比如sns**的「新鮮事兒」系統,我發帖之後,會給所有關注我的人推送一條通知。乍一看沒什麼難的,發帖之後找出關注我的人, 然後生成相應的訊息記錄就行了。但問題是,100個人關注我,就要執行100條insert查詢,更要命的是,web伺服器是同步的, 這100條查詢執行完成之前,使用者是看不到結果的。
怎麼辦呢,這時就輪到訊息佇列上場了。發帖之後只需給佇列傳送一條訊息, 告訴佇列「我發帖子了」,然後把發帖的結果返回給使用者。 這時另乙個叫做worker的程序會取出這條訊息並執行那100條insert查詢。這樣,推送通知的操作在後台非同步執行, 使用者就能立即看到發帖結果。更精彩的是,可以執行多個worker實現分布式,多繁重的任務都不在話下了
「」「而在icgoo中是為了jiayou介面的呼叫,在使用者完成訂單後,將介面呼叫的函式放入佇列,非同步去呼叫介面,不影響使用者頁面的返回
django-celery正是所要用到的任務訊息佇列
相關技術
rabbitmq:訊息佇列系統,負責儲存訊息;
django-celery: celery在django的使用
使用django+celery+rabbitmq實現非同步執行
celery官方文件
安裝安裝環境是freebsd,用ports安裝
rabbitmq的安裝
[liwei@queen ~]$ whereis rabbitmq
rabbitmq: /usr/ports/net/rabbitmq
[liwei@queen ~]$ cd /usr/ports/net/rabbitmq
[liwei@queen /usr/ports/net/rabbitmq]$ sudo make install
celery的安裝
[liwei@queen /usr/ports/devel/py-celery]$ sudo make install
django-celery的安裝
然後直接執行: sudo python setup.py install
應用程式示例
建立測試應用程式:
$ django-admin.py startproject celerytest
$ cd celerytest
$ cd hello
...'djcelery', # 加入celery
'hello', # 測試應用程式
}在settings.py末尾新增rabbitmq的配置:
import djcelery
djcelery.setup_loader()
broker_host = "localhost"
broker_port = 5672
broker_user = "guest"
broker_password = "guest"
broker_vhost = "/"
配置資料庫選項,因為djcelery要用到資料庫的。配置好之後執行:
$ python manage.py syncdb
可以執行 python manage.py 看一下,會發現 djcelery 應用程式給manage.py新增了許多celery*開頭的命令, 這些就是控制worker的命令了。
接下來寫個task。新建 hello/tasks.py,內容如下:
切換行號顯示
1 from celery.decorators import task
2 3 @task
4 def add(x, y):
5 return x + y
當然,別忘了必不可少的worker:
$ python manage.py celeryd -l info
在另乙個控制台測試一下:
$ python manage.py shell
>>> from hello.tasks import add
>>> r = add.delay(3,5) # 執行這一行就能在worker的日誌中看到執行狀況
>>> r.wait()
8參考:
使用django+celery+rabbitmq實現非同步執行
Django Celery定時任務
celery是由python開發的乙個簡單 靈活 可靠的處理大量任務的分發系統,它不僅支援實時處理也支援任務排程。pip3 install django celery beat pip3 install redis 寫入配置 celery broker url redis 密碼 127.0.0.1 ...
Django celery執行延時任務
常見的用來執行celery非同步任務的命令 t.delay arg,kwargs value 而還有另乙個命令是不常用的 是可以用來執行延時任務的,其中countdown指定多少秒後執行,expires指定最長等待之間,即過期時間。由於celery延時任務在超過執行時間後仍未執行,可能會發生重複執行...
Django Celery使用及介紹
1.1 celery應 舉例 1.2 celery有以下優點 1.3 celery 特性 2.1 celery 扮演 產者和消費者的角色 2.2 產生任務的方式 2.3 celery 依賴三個庫 這三個庫,都由 celery 的開發者開發和維護.推薦版本 django 2.2.6 django ce...