django celery 任務訊息佇列

2021-09-01 19:12:33 字數 2073 閱讀 6518

描述

為提高**效能,很多耗時,但不影響頁面正常的操作,可丟給訊息佇列非同步執行

「」「比如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...